mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Code comment spellfixes
This commit is contained in:
@@ -290,7 +290,7 @@ uint my_datetime_binary_length(uint dec)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
On disk we store as unsigned number with DATETIMEF_INT_OFS offset,
|
On disk we store as unsigned number with DATETIMEF_INT_OFS offset,
|
||||||
for HA_KETYPE_BINARY compatibilty purposes.
|
for HA_KETYPE_BINARY compatibility purposes.
|
||||||
*/
|
*/
|
||||||
#define DATETIMEF_INT_OFS 0x8000000000LL
|
#define DATETIMEF_INT_OFS 0x8000000000LL
|
||||||
|
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
/*
|
/*
|
||||||
Action to perform at a synchronization point.
|
Action to perform at a synchronization point.
|
||||||
NOTE: This structure is moved around in memory by realloc(), qsort(),
|
NOTE: This structure is moved around in memory by realloc(), qsort(),
|
||||||
and memmove(). Do not add objects with non-trivial constuctors
|
and memmove(). Do not add objects with non-trivial constructors
|
||||||
or destructors, which might prevent moving of this structure
|
or destructors, which might prevent moving of this structure
|
||||||
with these functions.
|
with these functions.
|
||||||
*/
|
*/
|
||||||
@@ -542,7 +542,7 @@ static void debug_sync_reset(THD *thd)
|
|||||||
@description
|
@description
|
||||||
Removing an action mainly means to decrement the ds_active counter.
|
Removing an action mainly means to decrement the ds_active counter.
|
||||||
But if the action is between other active action in the array, then
|
But if the action is between other active action in the array, then
|
||||||
the array needs to be shrinked. The active actions above the one to
|
the array needs to be shrunk. The active actions above the one to
|
||||||
be removed have to be moved down by one slot.
|
be removed have to be moved down by one slot.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -166,7 +166,7 @@ bool read_texts(const char *file_name, const char *language,
|
|||||||
MYF(0))) < 0)
|
MYF(0))) < 0)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Trying pre-5.4 sematics of the --language parameter.
|
Trying pre-5.4 semantics of the --language parameter.
|
||||||
It included the language-specific part, e.g.:
|
It included the language-specific part, e.g.:
|
||||||
|
|
||||||
--language=/path/to/english/
|
--language=/path/to/english/
|
||||||
|
@@ -75,8 +75,8 @@ int initialize_encryption_plugin(st_plugin_int *plugin)
|
|||||||
(struct st_mariadb_encryption*) plugin->plugin->info;
|
(struct st_mariadb_encryption*) plugin->plugin->info;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copmiler on Spark doesn't like the '?' operator here as it
|
Compiler on Spark doesn't like the '?' operator here as it
|
||||||
belives the (uint (*)...) implies the C++ call model.
|
believes the (uint (*)...) implies the C++ call model.
|
||||||
*/
|
*/
|
||||||
if (handle->crypt_ctx_size)
|
if (handle->crypt_ctx_size)
|
||||||
encryption_handler.encryption_ctx_size_func= handle->crypt_ctx_size;
|
encryption_handler.encryption_ctx_size_func= handle->crypt_ctx_size;
|
||||||
|
@@ -159,7 +159,7 @@ Event_creation_ctx::load_from_db(THD *thd,
|
|||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Initiliazes dbname and name of an Event_queue_element_for_exec
|
Initializes dbname and name of an Event_queue_element_for_exec
|
||||||
object
|
object
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
|
@@ -668,7 +668,7 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
|
|||||||
DBUG_PRINT("info", ("name: %.*s", (int) parse_data->name.length,
|
DBUG_PRINT("info", ("name: %.*s", (int) parse_data->name.length,
|
||||||
parse_data->name.str));
|
parse_data->name.str));
|
||||||
|
|
||||||
DBUG_PRINT("info", ("check existance of an event with the same name"));
|
DBUG_PRINT("info", ("check existence of an event with the same name"));
|
||||||
if (!find_named_event(parse_data->dbname, parse_data->name, table))
|
if (!find_named_event(parse_data->dbname, parse_data->name, table))
|
||||||
{
|
{
|
||||||
if (thd->lex->create_info.or_replace())
|
if (thd->lex->create_info.or_replace())
|
||||||
|
@@ -100,7 +100,7 @@ Event_parse_data::init_name(THD *thd, sp_name *spn)
|
|||||||
ENDS or AT is in the past, we are trying to create an event that
|
ENDS or AT is in the past, we are trying to create an event that
|
||||||
will never be executed. If it has ON COMPLETION NOT PRESERVE
|
will never be executed. If it has ON COMPLETION NOT PRESERVE
|
||||||
(default), then it would normally be dropped already, so on CREATE
|
(default), then it would normally be dropped already, so on CREATE
|
||||||
EVENT we give a warning, and do not create anyting. On ALTER EVENT
|
EVENT we give a warning, and do not create anything. On ALTER EVENT
|
||||||
we give a error, and do not change the event.
|
we give a error, and do not change the event.
|
||||||
|
|
||||||
If the event has ON COMPLETION PRESERVE, then we see if the event is
|
If the event has ON COMPLETION PRESERVE, then we see if the event is
|
||||||
@@ -359,7 +359,7 @@ wrong_value:
|
|||||||
EVERY 5 MINUTE STARTS "2004-12-12 10:00:00" means that
|
EVERY 5 MINUTE STARTS "2004-12-12 10:00:00" means that
|
||||||
the event will be executed every 5 minutes but this will
|
the event will be executed every 5 minutes but this will
|
||||||
start at the date shown above. Expressions are possible :
|
start at the date shown above. Expressions are possible :
|
||||||
DATE_ADD(NOW(), INTERVAL 1 DAY) -- start tommorow at
|
DATE_ADD(NOW(), INTERVAL 1 DAY) -- start tomorrow at
|
||||||
same time.
|
same time.
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
@@ -413,7 +413,7 @@ wrong_value:
|
|||||||
EVERY 5 MINUTE ENDS "2004-12-12 10:00:00" means that
|
EVERY 5 MINUTE ENDS "2004-12-12 10:00:00" means that
|
||||||
the event will be executed every 5 minutes but this will
|
the event will be executed every 5 minutes but this will
|
||||||
end at the date shown above. Expressions are possible :
|
end at the date shown above. Expressions are possible :
|
||||||
DATE_ADD(NOW(), INTERVAL 1 DAY) -- end tommorow at
|
DATE_ADD(NOW(), INTERVAL 1 DAY) -- end tomorrow at
|
||||||
same time.
|
same time.
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
|
@@ -357,7 +357,7 @@ Event_queue::drop_matching_events(THD *thd, LEX_STRING pattern,
|
|||||||
We don't call mysql_cond_broadcast(&COND_queue_state);
|
We don't call mysql_cond_broadcast(&COND_queue_state);
|
||||||
If we remove the top event:
|
If we remove the top event:
|
||||||
1. The queue is empty. The scheduler will wake up at some time and
|
1. The queue is empty. The scheduler will wake up at some time and
|
||||||
realize that the queue is empty. If create_event() comes inbetween
|
realize that the queue is empty. If create_event() comes in between
|
||||||
it will signal the scheduler
|
it will signal the scheduler
|
||||||
2. The queue is not empty, but the next event after the previous top,
|
2. The queue is not empty, but the next event after the previous top,
|
||||||
won't be executed any time sooner than the element we removed. Hence,
|
won't be executed any time sooner than the element we removed. Hence,
|
||||||
|
@@ -128,7 +128,7 @@ bool Events::check_if_system_tables_error()
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Reconstructs interval expression from interval type and expression
|
Reconstructs interval expression from interval type and expression
|
||||||
value that is in form of a value of the smalles entity:
|
value that is in form of a value of the smallest entity:
|
||||||
For
|
For
|
||||||
YEAR_MONTH - expression is in months
|
YEAR_MONTH - expression is in months
|
||||||
DAY_MINUTE - expression is in minutes
|
DAY_MINUTE - expression is in minutes
|
||||||
|
26
sql/field.cc
26
sql/field.cc
@@ -47,7 +47,7 @@
|
|||||||
#define MAX_EXPONENT 1024
|
#define MAX_EXPONENT 1024
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
Instansiate templates and static variables
|
Instantiate templates and static variables
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
static const char *zero_timestamp="0000-00-00 00:00:00.000000";
|
static const char *zero_timestamp="0000-00-00 00:00:00.000000";
|
||||||
@@ -78,7 +78,7 @@ const char field_separator=',';
|
|||||||
/*
|
/*
|
||||||
Rules for merging different types of fields in UNION
|
Rules for merging different types of fields in UNION
|
||||||
|
|
||||||
NOTE: to avoid 256*256 table, gap in table types numeration is skiped
|
NOTE: to avoid 256*256 table, gap in table types numeration is skipped
|
||||||
following #defines describe that gap and how to canculate number of fields
|
following #defines describe that gap and how to canculate number of fields
|
||||||
and index of field in thia array.
|
and index of field in thia array.
|
||||||
*/
|
*/
|
||||||
@@ -1374,7 +1374,7 @@ Item *Field_num::get_equal_zerofill_const_item(THD *thd, const Context &ctx,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Contruct warning parameters using thd->no_errors
|
Construct warning parameters using thd->no_errors
|
||||||
to determine whether to generate or suppress warnings.
|
to determine whether to generate or suppress warnings.
|
||||||
We can get here in a query like this:
|
We can get here in a query like this:
|
||||||
SELECT COUNT(@@basedir);
|
SELECT COUNT(@@basedir);
|
||||||
@@ -1422,7 +1422,7 @@ Value_source::Converter_string_to_number::check_edom_and_truncation(THD *thd,
|
|||||||
if (filter.want_warning_edom())
|
if (filter.want_warning_edom())
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We can use err.ptr() here as ErrConvString is guranteed to put an
|
We can use err.ptr() here as ErrConvString is guaranteed to put an
|
||||||
end \0 here.
|
end \0 here.
|
||||||
*/
|
*/
|
||||||
THD *wthd= thd ? thd : current_thd;
|
THD *wthd= thd ? thd : current_thd;
|
||||||
@@ -1454,7 +1454,7 @@ Value_source::Converter_string_to_number::check_edom_and_truncation(THD *thd,
|
|||||||
- found garbage at the end of the string.
|
- found garbage at the end of the string.
|
||||||
|
|
||||||
@param type Data type name (e.g. "decimal", "integer", "double")
|
@param type Data type name (e.g. "decimal", "integer", "double")
|
||||||
@param edom Indicates that the string-to-number routine retuned
|
@param edom Indicates that the string-to-number routine returned
|
||||||
an error code equivalent to EDOM (value out of domain),
|
an error code equivalent to EDOM (value out of domain),
|
||||||
i.e. the string fully consisted of garbage and the
|
i.e. the string fully consisted of garbage and the
|
||||||
conversion routine could not get any digits from it.
|
conversion routine could not get any digits from it.
|
||||||
@@ -1518,7 +1518,7 @@ int Field_num::check_edom_and_truncation(const char *type, bool edom,
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Conver a string to an integer then check bounds.
|
Convert a string to an integer then check bounds.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
Field_num::get_int
|
Field_num::get_int
|
||||||
@@ -2486,7 +2486,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
|
|||||||
We only have to generate warnings if count_cuted_fields is set.
|
We only have to generate warnings if count_cuted_fields is set.
|
||||||
This is to avoid extra checks of the number when they are not needed.
|
This is to avoid extra checks of the number when they are not needed.
|
||||||
Even if this flag is not set, it's OK to increment warnings, if
|
Even if this flag is not set, it's OK to increment warnings, if
|
||||||
it makes the code easer to read.
|
it makes the code easier to read.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (get_thd()->count_cuted_fields)
|
if (get_thd()->count_cuted_fields)
|
||||||
@@ -2569,7 +2569,7 @@ int Field_decimal::store(const char *from_arg, uint len, CHARSET_INFO *cs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Now write the formated number
|
Now write the formatted number
|
||||||
|
|
||||||
First the digits of the int_% parts.
|
First the digits of the int_% parts.
|
||||||
Do we have enough room to write these digits ?
|
Do we have enough room to write these digits ?
|
||||||
@@ -3129,7 +3129,7 @@ int Field_new_decimal::store(const char *from, uint length,
|
|||||||
If check_decimal() failed because of EDOM-alike error,
|
If check_decimal() failed because of EDOM-alike error,
|
||||||
(e.g. E_DEC_BAD_NUM), we have to initialize decimal_value to zero.
|
(e.g. E_DEC_BAD_NUM), we have to initialize decimal_value to zero.
|
||||||
Note: if check_decimal() failed because of truncation,
|
Note: if check_decimal() failed because of truncation,
|
||||||
decimal_value is alreay properly initialized.
|
decimal_value is already properly initialized.
|
||||||
*/
|
*/
|
||||||
my_decimal_set_zero(&decimal_value);
|
my_decimal_set_zero(&decimal_value);
|
||||||
/*
|
/*
|
||||||
@@ -4936,7 +4936,7 @@ Field_timestamp::Field_timestamp(uchar *ptr_arg, uint32 len_arg,
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We mark the flag with TIMESTAMP_FLAG to indicate to the client that
|
We mark the flag with TIMESTAMP_FLAG to indicate to the client that
|
||||||
this field will be automaticly updated on insert.
|
this field will be automatically updated on insert.
|
||||||
*/
|
*/
|
||||||
flags|= TIMESTAMP_FLAG;
|
flags|= TIMESTAMP_FLAG;
|
||||||
if (unireg_check != TIMESTAMP_DN_FIELD)
|
if (unireg_check != TIMESTAMP_DN_FIELD)
|
||||||
@@ -7345,7 +7345,7 @@ Field_string::unpack(uchar *to, const uchar *from, const uchar *from_end,
|
|||||||
with the real type. Since all allowable types have 0xF as most
|
with the real type. Since all allowable types have 0xF as most
|
||||||
significant bits of the metadata word, lengths <256 will not affect
|
significant bits of the metadata word, lengths <256 will not affect
|
||||||
the real type at all, while all other values will result in a
|
the real type at all, while all other values will result in a
|
||||||
non-existant type in the range 17-244.
|
non-existent type in the range 17-244.
|
||||||
|
|
||||||
@see Field_string::unpack
|
@see Field_string::unpack
|
||||||
|
|
||||||
@@ -9871,7 +9871,7 @@ void Create_field::init_for_tmp_table(enum_field_types sql_type_arg,
|
|||||||
/*
|
/*
|
||||||
Set the pack flag correctly for the blob-like types. This sets the
|
Set the pack flag correctly for the blob-like types. This sets the
|
||||||
packtype to something that make_field can use. If the pack type is
|
packtype to something that make_field can use. If the pack type is
|
||||||
not set correctly, the packlength will be reeeeally wierd (like
|
not set correctly, the packlength will be reeeeally weird (like
|
||||||
129 or so).
|
129 or so).
|
||||||
*/
|
*/
|
||||||
switch (sql_type_arg)
|
switch (sql_type_arg)
|
||||||
@@ -10079,7 +10079,7 @@ bool Create_field::check(THD *thd)
|
|||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_VARCHAR:
|
case MYSQL_TYPE_VARCHAR:
|
||||||
/*
|
/*
|
||||||
Long VARCHAR's are automaticly converted to blobs in mysql_prepare_table
|
Long VARCHAR's are automatically converted to blobs in mysql_prepare_table
|
||||||
if they don't have a default value
|
if they don't have a default value
|
||||||
*/
|
*/
|
||||||
max_field_charlength= MAX_FIELD_VARCHARLENGTH;
|
max_field_charlength= MAX_FIELD_VARCHARLENGTH;
|
||||||
|
@@ -241,7 +241,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// String-to-number convertion methods for the old code compatibility
|
// String-to-number conversion methods for the old code compatibility
|
||||||
longlong longlong_from_string_with_check(CHARSET_INFO *cs, const char *cptr,
|
longlong longlong_from_string_with_check(CHARSET_INFO *cs, const char *cptr,
|
||||||
const char *end) const
|
const char *end) const
|
||||||
{
|
{
|
||||||
@@ -312,7 +312,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
Item context attributes.
|
Item context attributes.
|
||||||
Comparison functions pass their attributes to propagate_equal_fields().
|
Comparison functions pass their attributes to propagate_equal_fields().
|
||||||
For exmple, for string comparison, the collation of the comparison
|
For example, for string comparison, the collation of the comparison
|
||||||
operation is important inside propagate_equal_fields().
|
operation is important inside propagate_equal_fields().
|
||||||
*/
|
*/
|
||||||
class Context
|
class Context
|
||||||
@@ -460,7 +460,7 @@ inline bool is_timestamp_type(enum_field_types type)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Convert temporal real types as retuned by field->real_type()
|
Convert temporal real types as returned by field->real_type()
|
||||||
to field type as returned by field->type().
|
to field type as returned by field->type().
|
||||||
|
|
||||||
@param real_type Real type.
|
@param real_type Real type.
|
||||||
@@ -3352,7 +3352,7 @@ private:
|
|||||||
This is the reason:
|
This is the reason:
|
||||||
- Field_bit::cmp_binary() is only implemented in the base class
|
- Field_bit::cmp_binary() is only implemented in the base class
|
||||||
(Field::cmp_binary()).
|
(Field::cmp_binary()).
|
||||||
- Field::cmp_binary() currenly use pack_length() to calculate how
|
- Field::cmp_binary() currently uses pack_length() to calculate how
|
||||||
long the data is.
|
long the data is.
|
||||||
- pack_length() includes size of the bits stored in the NULL bytes
|
- pack_length() includes size of the bits stored in the NULL bytes
|
||||||
of the record.
|
of the record.
|
||||||
|
@@ -236,7 +236,7 @@ static void do_skip(Copy_field *copy __attribute__((unused)))
|
|||||||
|
|
||||||
note: if the record we're copying from is NULL-complemetned (i.e.
|
note: if the record we're copying from is NULL-complemetned (i.e.
|
||||||
from_field->table->null_row==1), it will also have all NULLable columns to be
|
from_field->table->null_row==1), it will also have all NULLable columns to be
|
||||||
set to NULLs, so we dont need to check table->null_row here.
|
set to NULLs, so we don't need to check table->null_row here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void do_copy_null(Copy_field *copy)
|
static void do_copy_null(Copy_field *copy)
|
||||||
|
@@ -856,7 +856,7 @@ static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
|
|||||||
}
|
}
|
||||||
if (!quick_select)
|
if (!quick_select)
|
||||||
{
|
{
|
||||||
(void) file->extra(HA_EXTRA_NO_CACHE); /* End cacheing of records */
|
(void) file->extra(HA_EXTRA_NO_CACHE); /* End caching of records */
|
||||||
if (!next_pos)
|
if (!next_pos)
|
||||||
file->ha_rnd_end();
|
file->ha_rnd_end();
|
||||||
}
|
}
|
||||||
@@ -864,7 +864,7 @@ static ha_rows find_all_keys(THD *thd, Sort_param *param, SQL_SELECT *select,
|
|||||||
if (thd->is_error())
|
if (thd->is_error())
|
||||||
DBUG_RETURN(HA_POS_ERROR);
|
DBUG_RETURN(HA_POS_ERROR);
|
||||||
|
|
||||||
/* Signal we should use orignal column read and write maps */
|
/* Signal we should use original column read and write maps */
|
||||||
sort_form->column_bitmaps_set(save_read_set, save_write_set, save_vcol_set);
|
sort_form->column_bitmaps_set(save_read_set, save_write_set, save_vcol_set);
|
||||||
|
|
||||||
DBUG_PRINT("test",("error: %d indexpos: %d",error,indexpos));
|
DBUG_PRINT("test",("error: %d indexpos: %d",error,indexpos));
|
||||||
@@ -1141,7 +1141,7 @@ static void make_sortkey(Sort_param *param,
|
|||||||
}
|
}
|
||||||
case ROW_RESULT:
|
case ROW_RESULT:
|
||||||
default:
|
default:
|
||||||
// This case should never be choosen
|
// This case should never be chosen
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1927,7 +1927,7 @@ sortlength(THD *thd, SORT_FIELD *sortorder, uint s_length,
|
|||||||
break;
|
break;
|
||||||
case ROW_RESULT:
|
case ROW_RESULT:
|
||||||
default:
|
default:
|
||||||
// This case should never be choosen
|
// This case should never be chosen
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -1866,7 +1866,7 @@ int Gcalc_scan_iterator::add_eq_node(Gcalc_heap::Info *node, point *sp)
|
|||||||
if (!en)
|
if (!en)
|
||||||
GCALC_DBUG_RETURN(1);
|
GCALC_DBUG_RETURN(1);
|
||||||
|
|
||||||
/* eq_node iserted after teh equal point. */
|
/* eq_node inserted after the equal point. */
|
||||||
en->next= node->get_next();
|
en->next= node->get_next();
|
||||||
node->next= en;
|
node->next= en;
|
||||||
|
|
||||||
|
@@ -355,9 +355,9 @@ enum Gcalc_scan_events
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Gcalc_scan_iterator incapsulates the slisescan algorithm.
|
Gcalc_scan_iterator incapsulates the slicescan algorithm.
|
||||||
It takes filled Gcalc_heap as an datasource. Then can be
|
It takes filled Gcalc_heap as a datasource. Then can be
|
||||||
iterated trought the vertexes and intersection points with
|
iterated through the vertexes and intersection points with
|
||||||
the step() method. After the 'step()' one usually observes
|
the step() method. After the 'step()' one usually observes
|
||||||
the current 'slice' to do the necessary calculations, like
|
the current 'slice' to do the necessary calculations, like
|
||||||
looking for intersections, calculating the area, whatever.
|
looking for intersections, calculating the area, whatever.
|
||||||
|
@@ -1173,14 +1173,14 @@ int Gcalc_operation_reducer::connect_threads(
|
|||||||
{
|
{
|
||||||
rp0->outer_poly= prev_range->thread_start;
|
rp0->outer_poly= prev_range->thread_start;
|
||||||
tb->thread_start= prev_range->thread_start;
|
tb->thread_start= prev_range->thread_start;
|
||||||
/* Chack if needed */
|
/* Check if needed */
|
||||||
ta->thread_start= prev_range->thread_start;
|
ta->thread_start= prev_range->thread_start;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rp0->outer_poly= 0;
|
rp0->outer_poly= 0;
|
||||||
ta->thread_start= rp0;
|
ta->thread_start= rp0;
|
||||||
/* Chack if needed */
|
/* Check if needed */
|
||||||
tb->thread_start= rp0;
|
tb->thread_start= rp0;
|
||||||
}
|
}
|
||||||
GCALC_DBUG_RETURN(0);
|
GCALC_DBUG_RETURN(0);
|
||||||
|
@@ -542,7 +542,7 @@ bool ha_partition::initialize_partition(MEM_ROOT *mem_root)
|
|||||||
point.
|
point.
|
||||||
|
|
||||||
If you do not implement this, the default delete_table() is called from
|
If you do not implement this, the default delete_table() is called from
|
||||||
handler.cc and it will delete all files with the file extentions returned
|
handler.cc and it will delete all files with the file extensions returned
|
||||||
by bas_ext().
|
by bas_ext().
|
||||||
|
|
||||||
Called from handler.cc by delete_table and ha_create_table(). Only used
|
Called from handler.cc by delete_table and ha_create_table(). Only used
|
||||||
@@ -574,7 +574,7 @@ int ha_partition::delete_table(const char *name)
|
|||||||
Renames a table from one name to another from alter table call.
|
Renames a table from one name to another from alter table call.
|
||||||
|
|
||||||
If you do not implement this, the default rename_table() is called from
|
If you do not implement this, the default rename_table() is called from
|
||||||
handler.cc and it will rename all files with the file extentions returned
|
handler.cc and it will rename all files with the file extensions returned
|
||||||
by bas_ext().
|
by bas_ext().
|
||||||
|
|
||||||
Called from sql_table.cc by mysql_rename_table().
|
Called from sql_table.cc by mysql_rename_table().
|
||||||
@@ -1428,7 +1428,7 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@brief Check and repair the table if neccesary
|
@brief Check and repair the table if necessary
|
||||||
|
|
||||||
@param thd Thread object
|
@param thd Thread object
|
||||||
|
|
||||||
@@ -2907,7 +2907,7 @@ error_end:
|
|||||||
/**
|
/**
|
||||||
Read the .par file to get the partitions engines and names
|
Read the .par file to get the partitions engines and names
|
||||||
|
|
||||||
@param name Name of table file (without extention)
|
@param name Name of table file (without extension)
|
||||||
|
|
||||||
@return Operation status
|
@return Operation status
|
||||||
@retval true Failure
|
@retval true Failure
|
||||||
@@ -3135,7 +3135,7 @@ static uchar *get_part_name(PART_NAME_DEF *part, size_t *length,
|
|||||||
|
|
||||||
@return Operation status
|
@return Operation status
|
||||||
@retval true Failure
|
@retval true Failure
|
||||||
@retval false Sucess
|
@retval false Success
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool ha_partition::insert_partition_name_in_hash(const char *name, uint part_id,
|
bool ha_partition::insert_partition_name_in_hash(const char *name, uint part_id,
|
||||||
@@ -3261,7 +3261,7 @@ err:
|
|||||||
|
|
||||||
@return Operation status
|
@return Operation status
|
||||||
@retval true Failure
|
@retval true Failure
|
||||||
@retval false Sucess
|
@retval false Success
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool ha_partition::set_ha_share_ref(Handler_share **ha_share_arg)
|
bool ha_partition::set_ha_share_ref(Handler_share **ha_share_arg)
|
||||||
@@ -4141,7 +4141,7 @@ int ha_partition::write_row(uchar * buf)
|
|||||||
/*
|
/*
|
||||||
If we have failed to set the auto-increment value for this row,
|
If we have failed to set the auto-increment value for this row,
|
||||||
it is highly likely that we will not be able to insert it into
|
it is highly likely that we will not be able to insert it into
|
||||||
the correct partition. We must check and fail if neccessary.
|
the correct partition. We must check and fail if necessary.
|
||||||
*/
|
*/
|
||||||
if (error)
|
if (error)
|
||||||
goto exit;
|
goto exit;
|
||||||
@@ -4211,7 +4211,7 @@ exit:
|
|||||||
have the previous row record in it, while new_data will have the newest
|
have the previous row record in it, while new_data will have the newest
|
||||||
data in it.
|
data in it.
|
||||||
Keep in mind that the server can do updates based on ordering if an
|
Keep in mind that the server can do updates based on ordering if an
|
||||||
ORDER BY clause was used. Consecutive ordering is not guarenteed.
|
ORDER BY clause was used. Consecutive ordering is not guaranteed.
|
||||||
|
|
||||||
Called from sql_select.cc, sql_acl.cc, sql_update.cc, and sql_insert.cc.
|
Called from sql_select.cc, sql_acl.cc, sql_update.cc, and sql_insert.cc.
|
||||||
new_data is always record[0]
|
new_data is always record[0]
|
||||||
@@ -4353,7 +4353,7 @@ exit:
|
|||||||
(from either a previous rnd_xxx() or index_xxx() call).
|
(from either a previous rnd_xxx() or index_xxx() call).
|
||||||
If you keep a pointer to the last row or can access a primary key it will
|
If you keep a pointer to the last row or can access a primary key it will
|
||||||
make doing the deletion quite a bit easier.
|
make doing the deletion quite a bit easier.
|
||||||
Keep in mind that the server does no guarentee consecutive deletions.
|
Keep in mind that the server does no guarantee consecutive deletions.
|
||||||
ORDER BY clauses can be used.
|
ORDER BY clauses can be used.
|
||||||
|
|
||||||
Called in sql_acl.cc and sql_udf.cc to manage internal table information.
|
Called in sql_acl.cc and sql_udf.cc to manage internal table information.
|
||||||
@@ -4737,7 +4737,7 @@ int ha_partition::end_bulk_insert()
|
|||||||
|
|
||||||
When scan is used we will scan one handler partition at a time.
|
When scan is used we will scan one handler partition at a time.
|
||||||
When preparing for rnd_pos we will init all handler partitions.
|
When preparing for rnd_pos we will init all handler partitions.
|
||||||
No extra cache handling is needed when scannning is not performed.
|
No extra cache handling is needed when scanning is not performed.
|
||||||
|
|
||||||
Before initialising we will call rnd_end to ensure that we clean up from
|
Before initialising we will call rnd_end to ensure that we clean up from
|
||||||
any previous incarnation of a table scan.
|
any previous incarnation of a table scan.
|
||||||
@@ -5833,7 +5833,7 @@ int ha_partition::read_range_next()
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
ha_partition::partition_scan_set_up()
|
ha_partition::partition_scan_set_up()
|
||||||
buf Buffer to later return record in (this function
|
buf Buffer to later return record in (this function
|
||||||
needs it to calculcate partitioning function
|
needs it to calculate partitioning function
|
||||||
values)
|
values)
|
||||||
|
|
||||||
idx_read_flag TRUE <=> m_start_key has range start endpoint which
|
idx_read_flag TRUE <=> m_start_key has range start endpoint which
|
||||||
@@ -6850,7 +6850,7 @@ void ha_partition::get_dynamic_partition_info(PARTITION_STATS *stat_info,
|
|||||||
function after completing a query.
|
function after completing a query.
|
||||||
3) It is called when deleting the QUICK_RANGE_SELECT object if the
|
3) It is called when deleting the QUICK_RANGE_SELECT object if the
|
||||||
QUICK_RANGE_SELECT object had its own handler object. It is called
|
QUICK_RANGE_SELECT object had its own handler object. It is called
|
||||||
immediatley before close of this local handler object.
|
immediately before close of this local handler object.
|
||||||
HA_EXTRA_KEYREAD:
|
HA_EXTRA_KEYREAD:
|
||||||
HA_EXTRA_NO_KEYREAD:
|
HA_EXTRA_NO_KEYREAD:
|
||||||
These parameters are used to provide an optimisation hint to the handler.
|
These parameters are used to provide an optimisation hint to the handler.
|
||||||
@@ -6887,7 +6887,7 @@ void ha_partition::get_dynamic_partition_info(PARTITION_STATS *stat_info,
|
|||||||
HA_EXTRA_IGNORE_DUP_KEY:
|
HA_EXTRA_IGNORE_DUP_KEY:
|
||||||
HA_EXTRA_NO_IGNORE_DUP_KEY:
|
HA_EXTRA_NO_IGNORE_DUP_KEY:
|
||||||
Informs the handler to we will not stop the transaction if we get an
|
Informs the handler to we will not stop the transaction if we get an
|
||||||
duplicate key errors during insert/upate.
|
duplicate key errors during insert/update.
|
||||||
Always called in pair, triggered by INSERT IGNORE and other similar
|
Always called in pair, triggered by INSERT IGNORE and other similar
|
||||||
SQL constructs.
|
SQL constructs.
|
||||||
Not used by MyISAM.
|
Not used by MyISAM.
|
||||||
@@ -8286,7 +8286,7 @@ bool ha_partition::prepare_inplace_alter_table(TABLE *altered_table,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Changing to similar partitioning, only update metadata.
|
Changing to similar partitioning, only update metadata.
|
||||||
Non allowed changes would be catched in prep_alter_part_table().
|
Non allowed changes would be caught in prep_alter_part_table().
|
||||||
*/
|
*/
|
||||||
if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION)
|
if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION)
|
||||||
DBUG_RETURN(false);
|
DBUG_RETURN(false);
|
||||||
@@ -8319,7 +8319,7 @@ bool ha_partition::inplace_alter_table(TABLE *altered_table,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Changing to similar partitioning, only update metadata.
|
Changing to similar partitioning, only update metadata.
|
||||||
Non allowed changes would be catched in prep_alter_part_table().
|
Non allowed changes would be caught in prep_alter_part_table().
|
||||||
*/
|
*/
|
||||||
if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION)
|
if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION)
|
||||||
DBUG_RETURN(false);
|
DBUG_RETURN(false);
|
||||||
@@ -8364,7 +8364,7 @@ bool ha_partition::commit_inplace_alter_table(TABLE *altered_table,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Changing to similar partitioning, only update metadata.
|
Changing to similar partitioning, only update metadata.
|
||||||
Non allowed changes would be catched in prep_alter_part_table().
|
Non allowed changes would be caught in prep_alter_part_table().
|
||||||
*/
|
*/
|
||||||
if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION)
|
if (ha_alter_info->alter_info->flags == Alter_info::ALTER_PARTITION)
|
||||||
DBUG_RETURN(false);
|
DBUG_RETURN(false);
|
||||||
|
@@ -292,7 +292,7 @@ public:
|
|||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
MODULE create/delete handler object
|
MODULE create/delete handler object
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
Object create/delete methode. The normal called when a table object
|
Object create/delete method. Normally called when a table object
|
||||||
exists. There is also a method to create the handler object with only
|
exists. There is also a method to create the handler object with only
|
||||||
partition information. This is used from mysql_create_table when the
|
partition information. This is used from mysql_create_table when the
|
||||||
table is to be created and the engine type is deduced to be the
|
table is to be created and the engine type is deduced to be the
|
||||||
@@ -590,7 +590,7 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
@breif
|
@breif
|
||||||
Positions an index cursor to the index specified in the hanlde. Fetches the
|
Positions an index cursor to the index specified in the handle. Fetches the
|
||||||
row if available. If the key value is null, begin at first key of the
|
row if available. If the key value is null, begin at first key of the
|
||||||
index.
|
index.
|
||||||
*/
|
*/
|
||||||
@@ -805,7 +805,7 @@ public:
|
|||||||
|
|
||||||
HA_REC_NOT_IN_SEQ:
|
HA_REC_NOT_IN_SEQ:
|
||||||
This flag is set for handlers that cannot guarantee that the rows are
|
This flag is set for handlers that cannot guarantee that the rows are
|
||||||
returned accroding to incremental positions (0, 1, 2, 3...).
|
returned according to incremental positions (0, 1, 2, 3...).
|
||||||
This also means that rnd_next() should return HA_ERR_RECORD_DELETED
|
This also means that rnd_next() should return HA_ERR_RECORD_DELETED
|
||||||
if it finds a deleted row.
|
if it finds a deleted row.
|
||||||
(MyISAM (not fixed length row), HEAP, InnoDB)
|
(MyISAM (not fixed length row), HEAP, InnoDB)
|
||||||
|
@@ -725,7 +725,7 @@ int ha_end()
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This should be eventualy based on the graceful shutdown flag.
|
This should be eventually based on the graceful shutdown flag.
|
||||||
So if flag is equal to HA_PANIC_CLOSE, the deallocate
|
So if flag is equal to HA_PANIC_CLOSE, the deallocate
|
||||||
the errors.
|
the errors.
|
||||||
*/
|
*/
|
||||||
@@ -1334,8 +1334,8 @@ int ha_commit_trans(THD *thd, bool all)
|
|||||||
THD_TRANS *trans= all ? &thd->transaction.all : &thd->transaction.stmt;
|
THD_TRANS *trans= all ? &thd->transaction.all : &thd->transaction.stmt;
|
||||||
/*
|
/*
|
||||||
"real" is a nick name for a transaction for which a commit will
|
"real" is a nick name for a transaction for which a commit will
|
||||||
make persistent changes. E.g. a 'stmt' transaction inside a 'all'
|
make persistent changes. E.g. a 'stmt' transaction inside an 'all'
|
||||||
transation is not 'real': even though it's possible to commit it,
|
transaction is not 'real': even though it's possible to commit it,
|
||||||
the changes are not durable as they might be rolled back if the
|
the changes are not durable as they might be rolled back if the
|
||||||
enclosing 'all' transaction is rolled back.
|
enclosing 'all' transaction is rolled back.
|
||||||
*/
|
*/
|
||||||
@@ -2472,7 +2472,7 @@ handler *handler::clone(const char *name, MEM_ROOT *mem_root)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
TODO: Implement a more efficient way to have more than one index open for
|
TODO: Implement a more efficient way to have more than one index open for
|
||||||
the same table instance. The ha_open call is not cachable for clone.
|
the same table instance. The ha_open call is not cacheable for clone.
|
||||||
|
|
||||||
This is not critical as the engines already have the table open
|
This is not critical as the engines already have the table open
|
||||||
and should be able to use the original instance of the table.
|
and should be able to use the original instance of the table.
|
||||||
@@ -3254,7 +3254,7 @@ int handler::update_auto_increment()
|
|||||||
index_init() or rnd_init() and in any column_bitmaps_signal() call after
|
index_init() or rnd_init() and in any column_bitmaps_signal() call after
|
||||||
this.
|
this.
|
||||||
|
|
||||||
The handler is allowd to do changes to the bitmap after a index_init or
|
The handler is allowed to do changes to the bitmap after a index_init or
|
||||||
rnd_init() call is made as after this, MySQL will not use the bitmap
|
rnd_init() call is made as after this, MySQL will not use the bitmap
|
||||||
for any program logic checking.
|
for any program logic checking.
|
||||||
*/
|
*/
|
||||||
@@ -3311,7 +3311,7 @@ void handler::get_auto_increment(ulonglong offset, ulonglong increment,
|
|||||||
{ // Autoincrement at key-start
|
{ // Autoincrement at key-start
|
||||||
error= ha_index_last(table->record[1]);
|
error= ha_index_last(table->record[1]);
|
||||||
/*
|
/*
|
||||||
MySQL implicitely assumes such method does locking (as MySQL decides to
|
MySQL implicitly assumes such method does locking (as MySQL decides to
|
||||||
use nr+increment without checking again with the handler, in
|
use nr+increment without checking again with the handler, in
|
||||||
handler::update_auto_increment()), so reserves to infinite.
|
handler::update_auto_increment()), so reserves to infinite.
|
||||||
*/
|
*/
|
||||||
|
@@ -209,7 +209,7 @@ enum enum_alter_inplace_result {
|
|||||||
this flag must implement start_read_removal() and end_read_removal().
|
this flag must implement start_read_removal() and end_read_removal().
|
||||||
The handler may return "fake" rows constructed from the key of the row
|
The handler may return "fake" rows constructed from the key of the row
|
||||||
asked for. This is used to optimize UPDATE and DELETE by reducing the
|
asked for. This is used to optimize UPDATE and DELETE by reducing the
|
||||||
numer of roundtrips between handler and storage engine.
|
number of roundtrips between handler and storage engine.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
UPDATE a=1 WHERE pk IN (<keys>)
|
UPDATE a=1 WHERE pk IN (<keys>)
|
||||||
@@ -489,7 +489,7 @@ enum enum_binlog_command {
|
|||||||
|
|
||||||
/* Bits in used_fields */
|
/* Bits in used_fields */
|
||||||
#define HA_CREATE_USED_AUTO (1L << 0)
|
#define HA_CREATE_USED_AUTO (1L << 0)
|
||||||
#define HA_CREATE_USED_RAID (1L << 1) //RAID is no longer availble
|
#define HA_CREATE_USED_RAID (1L << 1) //RAID is no longer available
|
||||||
#define HA_CREATE_USED_UNION (1L << 2)
|
#define HA_CREATE_USED_UNION (1L << 2)
|
||||||
#define HA_CREATE_USED_INSERT_METHOD (1L << 3)
|
#define HA_CREATE_USED_INSERT_METHOD (1L << 3)
|
||||||
#define HA_CREATE_USED_MIN_ROWS (1L << 4)
|
#define HA_CREATE_USED_MIN_ROWS (1L << 4)
|
||||||
@@ -956,7 +956,7 @@ struct handler_iterator {
|
|||||||
/*
|
/*
|
||||||
Pointer to buffer for the iterator to use.
|
Pointer to buffer for the iterator to use.
|
||||||
Should be allocated by function which created the iterator and
|
Should be allocated by function which created the iterator and
|
||||||
destroied by freed by above "destroy" call
|
destroyed by freed by above "destroy" call
|
||||||
*/
|
*/
|
||||||
void *buffer;
|
void *buffer;
|
||||||
};
|
};
|
||||||
@@ -1172,7 +1172,7 @@ struct handlerton
|
|||||||
"cookie".
|
"cookie".
|
||||||
|
|
||||||
The flush and call of commit_checkpoint_notify_ha() need not happen
|
The flush and call of commit_checkpoint_notify_ha() need not happen
|
||||||
immediately - it can be scheduled and performed asynchroneously (ie. as
|
immediately - it can be scheduled and performed asynchronously (ie. as
|
||||||
part of next prepare(), or sync every second, or whatever), but should
|
part of next prepare(), or sync every second, or whatever), but should
|
||||||
not be postponed indefinitely. It is however also permissible to do it
|
not be postponed indefinitely. It is however also permissible to do it
|
||||||
immediately, before returning from commit_checkpoint_request().
|
immediately, before returning from commit_checkpoint_request().
|
||||||
@@ -1258,13 +1258,13 @@ struct handlerton
|
|||||||
Used by open_table_error(), by the default rename_table and delete_table
|
Used by open_table_error(), by the default rename_table and delete_table
|
||||||
handler methods, and by the default discovery implementation.
|
handler methods, and by the default discovery implementation.
|
||||||
|
|
||||||
For engines that have more than one file name extentions (separate
|
For engines that have more than one file name extensions (separate
|
||||||
metadata, index, and/or data files), the order of elements is relevant.
|
metadata, index, and/or data files), the order of elements is relevant.
|
||||||
First element of engine file name extentions array should be metadata
|
First element of engine file name extensions array should be metadata
|
||||||
file extention. This is implied by the open_table_error()
|
file extension. This is implied by the open_table_error()
|
||||||
and the default discovery implementation.
|
and the default discovery implementation.
|
||||||
|
|
||||||
Second element - data file extention. This is implied
|
Second element - data file extension. This is implied
|
||||||
assumed by REPAIR TABLE ... USE_FRM implementation.
|
assumed by REPAIR TABLE ... USE_FRM implementation.
|
||||||
*/
|
*/
|
||||||
const char **tablefile_extensions; // by default - empty list
|
const char **tablefile_extensions; // by default - empty list
|
||||||
@@ -1760,7 +1760,7 @@ struct HA_CREATE_INFO: public Table_scope_and_contents_source_st,
|
|||||||
CONVERT TO CHARACTER SET DEFAULT
|
CONVERT TO CHARACTER SET DEFAULT
|
||||||
to
|
to
|
||||||
CONVERT TO CHARACTER SET <character-set-of-the-current-database>
|
CONVERT TO CHARACTER SET <character-set-of-the-current-database>
|
||||||
TODO: Should't we postpone resolution of DEFAULT until the
|
TODO: Shouldn't we postpone resolution of DEFAULT until the
|
||||||
character set of the table owner database is loaded from its db.opt?
|
character set of the table owner database is loaded from its db.opt?
|
||||||
*/
|
*/
|
||||||
DBUG_ASSERT(cs);
|
DBUG_ASSERT(cs);
|
||||||
@@ -2619,7 +2619,7 @@ public:
|
|||||||
ha_statistics stats;
|
ha_statistics stats;
|
||||||
|
|
||||||
/** MultiRangeRead-related members: */
|
/** MultiRangeRead-related members: */
|
||||||
range_seq_t mrr_iter; /* Interator to traverse the range sequence */
|
range_seq_t mrr_iter; /* Iterator to traverse the range sequence */
|
||||||
RANGE_SEQ_IF mrr_funcs; /* Range sequence traversal functions */
|
RANGE_SEQ_IF mrr_funcs; /* Range sequence traversal functions */
|
||||||
HANDLER_BUFFER *multi_range_buffer; /* MRR buffer info */
|
HANDLER_BUFFER *multi_range_buffer; /* MRR buffer info */
|
||||||
uint ranges_in_seq; /* Total number of ranges in the traversed sequence */
|
uint ranges_in_seq; /* Total number of ranges in the traversed sequence */
|
||||||
@@ -3440,7 +3440,7 @@ public:
|
|||||||
This method offers the storage engine, the possibility to store a reference
|
This method offers the storage engine, the possibility to store a reference
|
||||||
to a table name which is going to be used with query cache.
|
to a table name which is going to be used with query cache.
|
||||||
The method is called each time a statement is written to the cache and can
|
The method is called each time a statement is written to the cache and can
|
||||||
be used to verify if a specific statement is cachable. It also offers
|
be used to verify if a specific statement is cacheable. It also offers
|
||||||
the possibility to register a generic (but static) call back function which
|
the possibility to register a generic (but static) call back function which
|
||||||
is called each time a statement is matched against the query cache.
|
is called each time a statement is matched against the query cache.
|
||||||
|
|
||||||
|
16
sql/item.cc
16
sql/item.cc
@@ -1342,7 +1342,7 @@ err:
|
|||||||
bool Item::make_zero_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
|
bool Item::make_zero_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
if the item was not null and convertion failed, we return a zero date
|
if the item was not null and conversion failed, we return a zero date
|
||||||
if allowed, otherwise - null.
|
if allowed, otherwise - null.
|
||||||
*/
|
*/
|
||||||
bzero((char*) ltime,sizeof(*ltime));
|
bzero((char*) ltime,sizeof(*ltime));
|
||||||
@@ -4247,7 +4247,7 @@ static bool mark_as_dependent(THD *thd, SELECT_LEX *last, SELECT_LEX *current,
|
|||||||
|
|
||||||
@note
|
@note
|
||||||
We have to mark all items between current_sel (including) and
|
We have to mark all items between current_sel (including) and
|
||||||
last_select (excluding) as dependend (select before last_select should
|
last_select (excluding) as dependent (select before last_select should
|
||||||
be marked with actual table mask used by resolved item, all other with
|
be marked with actual table mask used by resolved item, all other with
|
||||||
OUTER_REF_TABLE_BIT) and also write dependence information to Item of
|
OUTER_REF_TABLE_BIT) and also write dependence information to Item of
|
||||||
resolved identifier.
|
resolved identifier.
|
||||||
@@ -4620,7 +4620,7 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
|
|||||||
bool upward_lookup= FALSE;
|
bool upward_lookup= FALSE;
|
||||||
TABLE_LIST *table_list;
|
TABLE_LIST *table_list;
|
||||||
|
|
||||||
/* Calulate the TABLE_LIST for the table */
|
/* Calculate the TABLE_LIST for the table */
|
||||||
table_list= (cached_table ? cached_table :
|
table_list= (cached_table ? cached_table :
|
||||||
field_found && (*from_field) != view_ref_found ?
|
field_found && (*from_field) != view_ref_found ?
|
||||||
(*from_field)->table->pos_in_table_list : 0);
|
(*from_field)->table->pos_in_table_list : 0);
|
||||||
@@ -5334,7 +5334,7 @@ Item *Item_field::propagate_equal_fields(THD *thd,
|
|||||||
but failed to create a valid DATE literal from the given string literal.
|
but failed to create a valid DATE literal from the given string literal.
|
||||||
|
|
||||||
Do not do constant propagation in such cases and unlink
|
Do not do constant propagation in such cases and unlink
|
||||||
"this" from the found Item_equal (as this equality not usefull).
|
"this" from the found Item_equal (as this equality not useful).
|
||||||
*/
|
*/
|
||||||
item_equal= NULL;
|
item_equal= NULL;
|
||||||
return this;
|
return this;
|
||||||
@@ -6934,7 +6934,7 @@ bool Item_ref::fix_fields(THD *thd, Item **reference)
|
|||||||
/*
|
/*
|
||||||
Due to cache, find_field_in_tables() can return field which
|
Due to cache, find_field_in_tables() can return field which
|
||||||
doesn't belong to provided outer_context. In this case we have
|
doesn't belong to provided outer_context. In this case we have
|
||||||
to find proper field context in order to fix field correcly.
|
to find proper field context in order to fix field correctly.
|
||||||
*/
|
*/
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -7118,9 +7118,9 @@ Item* Item_ref::transform(THD *thd, Item_transformer transformer, uchar *arg)
|
|||||||
callback functions.
|
callback functions.
|
||||||
|
|
||||||
First the function applies the analyzer to the Item_ref object. Then
|
First the function applies the analyzer to the Item_ref object. Then
|
||||||
if the analizer succeeeds we first applies the compile method to the
|
if the analyzer succeeds we first apply the compile method to the
|
||||||
object the Item_ref object is referencing. If this returns a new
|
object the Item_ref object is referencing. If this returns a new
|
||||||
item the old item is substituted for a new one. After this the
|
item the old item is substituted for a new one. After this the
|
||||||
transformer is applied to the Item_ref object itself.
|
transformer is applied to the Item_ref object itself.
|
||||||
The compile function is not called if the analyzer returns NULL
|
The compile function is not called if the analyzer returns NULL
|
||||||
in the parameter arg_p.
|
in the parameter arg_p.
|
||||||
@@ -9578,7 +9578,7 @@ bool Item_type_holder::join_types(THD *thd, Item *item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Calculate lenth for merging result for given Item type.
|
Calculate length for merging result for given Item type.
|
||||||
|
|
||||||
@param item Item for length detection
|
@param item Item for length detection
|
||||||
|
|
||||||
|
16
sql/item.h
16
sql/item.h
@@ -204,7 +204,7 @@ void dummy_error_processor(THD *thd, void *data);
|
|||||||
void view_error_processor(THD *thd, void *data);
|
void view_error_processor(THD *thd, void *data);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Instances of Name_resolution_context store the information necesary for
|
Instances of Name_resolution_context store the information necessary for
|
||||||
name resolution of Items and other context analysis of a query made in
|
name resolution of Items and other context analysis of a query made in
|
||||||
fix_fields().
|
fix_fields().
|
||||||
|
|
||||||
@@ -362,7 +362,7 @@ public:
|
|||||||
Monotonicity is defined only for Item* trees that represent table
|
Monotonicity is defined only for Item* trees that represent table
|
||||||
partitioning expressions (i.e. have no subselects/user vars/PS parameters
|
partitioning expressions (i.e. have no subselects/user vars/PS parameters
|
||||||
etc etc). An Item* tree is assumed to have the same monotonicity properties
|
etc etc). An Item* tree is assumed to have the same monotonicity properties
|
||||||
as its correspoinding function F:
|
as its corresponding function F:
|
||||||
|
|
||||||
[signed] longlong F(field1, field2, ...) {
|
[signed] longlong F(field1, field2, ...) {
|
||||||
put values of field_i into table record buffer;
|
put values of field_i into table record buffer;
|
||||||
@@ -701,7 +701,7 @@ protected:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
This method is used if the item was not null but convertion to
|
This method is used if the item was not null but conversion to
|
||||||
TIME/DATE/DATETIME failed. We return a zero date if allowed,
|
TIME/DATE/DATETIME failed. We return a zero date if allowed,
|
||||||
otherwise - null.
|
otherwise - null.
|
||||||
*/
|
*/
|
||||||
@@ -822,7 +822,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
real_type() is the type of base item. This is same as type() for
|
real_type() is the type of base item. This is same as type() for
|
||||||
most items, except Item_ref() and Item_cache_wrapper() where it
|
most items, except Item_ref() and Item_cache_wrapper() where it
|
||||||
shows the type for the underlaying item.
|
shows the type for the underlying item.
|
||||||
*/
|
*/
|
||||||
virtual enum Type real_type() const { return type(); }
|
virtual enum Type real_type() const { return type(); }
|
||||||
|
|
||||||
@@ -915,7 +915,7 @@ public:
|
|||||||
The caller can modify the returned String, if it's not marked
|
The caller can modify the returned String, if it's not marked
|
||||||
"const" (with the String::mark_as_const() method). That means that
|
"const" (with the String::mark_as_const() method). That means that
|
||||||
if the item returns its own internal buffer (e.g. tmp_value), it
|
if the item returns its own internal buffer (e.g. tmp_value), it
|
||||||
*must* be marked "const" [1]. So normally it's preferrable to
|
*must* be marked "const" [1]. So normally it's preferable to
|
||||||
return the result value in the String, that was passed as an
|
return the result value in the String, that was passed as an
|
||||||
argument. But, for example, SUBSTR() returns a String that simply
|
argument. But, for example, SUBSTR() returns a String that simply
|
||||||
points into the buffer of SUBSTR()'s args[0]->val_str(). Such a
|
points into the buffer of SUBSTR()'s args[0]->val_str(). Such a
|
||||||
@@ -1239,7 +1239,7 @@ public:
|
|||||||
@param cond_ptr[OUT] Store a replacement item here if the condition
|
@param cond_ptr[OUT] Store a replacement item here if the condition
|
||||||
can be simplified, e.g.:
|
can be simplified, e.g.:
|
||||||
WHERE part1 OR part2 OR part3
|
WHERE part1 OR part2 OR part3
|
||||||
with one of the partN evalutating to SEL_TREE::ALWAYS.
|
with one of the partN evaluating to SEL_TREE::ALWAYS.
|
||||||
*/
|
*/
|
||||||
virtual SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param, Item **cond_ptr);
|
virtual SEL_TREE *get_mm_tree(RANGE_OPT_PARAM *param, Item **cond_ptr);
|
||||||
/*
|
/*
|
||||||
@@ -1833,7 +1833,7 @@ public:
|
|||||||
virtual bool is_outer_field() const { DBUG_ASSERT(fixed); return FALSE; }
|
virtual bool is_outer_field() const { DBUG_ASSERT(fixed); return FALSE; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Checks if this item or any of its decendents contains a subquery.
|
Checks if this item or any of its descendents contains a subquery.
|
||||||
*/
|
*/
|
||||||
virtual bool has_subquery() const { return with_subselect; }
|
virtual bool has_subquery() const { return with_subselect; }
|
||||||
|
|
||||||
@@ -4692,7 +4692,7 @@ public:
|
|||||||
|
|
||||||
This is the method that updates the cached value.
|
This is the method that updates the cached value.
|
||||||
It must be explicitly called by the user of this class to store the value
|
It must be explicitly called by the user of this class to store the value
|
||||||
of the orginal item in the cache.
|
of the original item in the cache.
|
||||||
*/
|
*/
|
||||||
virtual void copy() = 0;
|
virtual void copy() = 0;
|
||||||
|
|
||||||
|
@@ -140,7 +140,7 @@ bool Cached_item_field::cmp(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
If value is not null and value changed (from null to not null or
|
If value is not null and value changed (from null to not null or
|
||||||
becasue of value change), then copy the new value to buffer.
|
because of value change), then copy the new value to buffer.
|
||||||
*/
|
*/
|
||||||
if (! null_value && (tmp || (tmp= (field->cmp(buff) != 0))))
|
if (! null_value && (tmp || (tmp= (field->cmp(buff) != 0))))
|
||||||
field->get_image(buff,length,field->charset());
|
field->get_image(buff,length,field->charset());
|
||||||
|
@@ -745,7 +745,7 @@ Item** Arg_comparator::cache_converted_constant(THD *thd_arg, Item **value,
|
|||||||
|
|
||||||
If the value should be compared as time (TIME_RESULT), it's retrieved as
|
If the value should be compared as time (TIME_RESULT), it's retrieved as
|
||||||
MYSQL_TIME. Otherwise it's read as a number/string and converted to time.
|
MYSQL_TIME. Otherwise it's read as a number/string and converted to time.
|
||||||
Constant items are cached, so the convertion is only done once for them.
|
Constant items are cached, so the conversion is only done once for them.
|
||||||
|
|
||||||
Note the f_type behavior: if the item can be compared as time, then
|
Note the f_type behavior: if the item can be compared as time, then
|
||||||
f_type is this item's field_type(). Otherwise it's field_type() of
|
f_type is this item's field_type(). Otherwise it's field_type() of
|
||||||
@@ -1425,7 +1425,7 @@ bool Item_in_optimizer::fix_fields(THD *thd, Item **ref)
|
|||||||
@note
|
@note
|
||||||
Item_in_optimizer should work as pass-through for
|
Item_in_optimizer should work as pass-through for
|
||||||
- subqueries that were processed by ALL/ANY->MIN/MAX rewrite
|
- subqueries that were processed by ALL/ANY->MIN/MAX rewrite
|
||||||
- subqueries taht were originally EXISTS subqueries (and were coverted by
|
- subqueries that were originally EXISTS subqueries (and were coinverted by
|
||||||
the EXISTS->IN rewrite)
|
the EXISTS->IN rewrite)
|
||||||
|
|
||||||
When Item_in_optimizer is not not working as a pass-through, it
|
When Item_in_optimizer is not not working as a pass-through, it
|
||||||
@@ -2013,8 +2013,8 @@ longlong Item_func_interval::val_int()
|
|||||||
interval_range *range= intervals + mid;
|
interval_range *range= intervals + mid;
|
||||||
my_bool cmp_result;
|
my_bool cmp_result;
|
||||||
/*
|
/*
|
||||||
The values in the range intervall may have different types,
|
The values in the range interval may have different types,
|
||||||
Only do a decimal comparision of the first argument is a decimal
|
Only do a decimal comparison if the first argument is a decimal
|
||||||
and we are comparing against a decimal
|
and we are comparing against a decimal
|
||||||
*/
|
*/
|
||||||
if (dec && range->type == DECIMAL_RESULT)
|
if (dec && range->type == DECIMAL_RESULT)
|
||||||
@@ -2696,7 +2696,7 @@ Item_func_nullif::fix_length_and_dec()
|
|||||||
Some examples of what NULLIF can end up with after argument
|
Some examples of what NULLIF can end up with after argument
|
||||||
substitution (we don't mention args[1] in some cases for simplicity):
|
substitution (we don't mention args[1] in some cases for simplicity):
|
||||||
|
|
||||||
1. l_expr is not an aggragate function:
|
1. l_expr is not an aggregate function:
|
||||||
|
|
||||||
a. No conversion happened.
|
a. No conversion happened.
|
||||||
args[0] and args[2] were not replaced to something else
|
args[0] and args[2] were not replaced to something else
|
||||||
@@ -2817,7 +2817,7 @@ Item_func_nullif::fix_length_and_dec()
|
|||||||
In this case we remember and reuse m_arg0 during EXECUTE time as args[2].
|
In this case we remember and reuse m_arg0 during EXECUTE time as args[2].
|
||||||
|
|
||||||
QQ: How to make sure that m_args0 does not point
|
QQ: How to make sure that m_args0 does not point
|
||||||
to something temporary which will be destoyed between PREPARE and EXECUTE.
|
to something temporary which will be destroyed between PREPARE and EXECUTE.
|
||||||
The condition below should probably be more strict and somehow check that:
|
The condition below should probably be more strict and somehow check that:
|
||||||
- change_item_tree() was called for the new args[0]
|
- change_item_tree() was called for the new args[0]
|
||||||
- m_args0 is referenced from inside args[0], e.g. as a function argument,
|
- m_args0 is referenced from inside args[0], e.g. as a function argument,
|
||||||
@@ -3279,7 +3279,7 @@ void Item_func_case::fix_length_and_dec()
|
|||||||
If we'll do string comparison, we also need to aggregate
|
If we'll do string comparison, we also need to aggregate
|
||||||
character set and collation for first/WHEN items and
|
character set and collation for first/WHEN items and
|
||||||
install converters for some of them to cmp_collation when necessary.
|
install converters for some of them to cmp_collation when necessary.
|
||||||
This is done because cmp_item compatators cannot compare
|
This is done because cmp_item comparators cannot compare
|
||||||
strings in two different character sets.
|
strings in two different character sets.
|
||||||
Some examples when we install converters:
|
Some examples when we install converters:
|
||||||
|
|
||||||
@@ -4402,7 +4402,7 @@ void Item_func_in::fix_length_and_dec()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We don't put NULL values in array, to avoid erronous matches in
|
We don't put NULL values in array, to avoid erroneous matches in
|
||||||
bisection.
|
bisection.
|
||||||
*/
|
*/
|
||||||
have_null= 1;
|
have_null= 1;
|
||||||
@@ -6887,7 +6887,7 @@ Item* Item_equal::get_first(JOIN_TAB *context, Item *field_item)
|
|||||||
and not ot2.col.
|
and not ot2.col.
|
||||||
|
|
||||||
eliminate_item_equal() also has code that deals with equality substitution
|
eliminate_item_equal() also has code that deals with equality substitution
|
||||||
in presense of SJM nests.
|
in presence of SJM nests.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
TABLE_LIST *emb_nest;
|
TABLE_LIST *emb_nest;
|
||||||
|
@@ -150,7 +150,7 @@ protected:
|
|||||||
/*
|
/*
|
||||||
Return the full select tree for "field_item" and "value":
|
Return the full select tree for "field_item" and "value":
|
||||||
- a single SEL_TREE if the field is not in a multiple equality, or
|
- a single SEL_TREE if the field is not in a multiple equality, or
|
||||||
- a conjuction of all SEL_TREEs for all fields from
|
- a conjunction of all SEL_TREEs for all fields from
|
||||||
the same multiple equality with "field_item".
|
the same multiple equality with "field_item".
|
||||||
*/
|
*/
|
||||||
SEL_TREE *get_full_func_mm_tree(RANGE_OPT_PARAM *param,
|
SEL_TREE *get_full_func_mm_tree(RANGE_OPT_PARAM *param,
|
||||||
|
@@ -363,7 +363,7 @@ Item *Item_func::transform(THD *thd, Item_transformer transformer, uchar *argume
|
|||||||
callback functions.
|
callback functions.
|
||||||
|
|
||||||
First the function applies the analyzer to the root node of
|
First the function applies the analyzer to the root node of
|
||||||
the Item_func object. Then if the analizer succeeeds (returns TRUE)
|
the Item_func object. Then if the analyzer succeeds (returns TRUE)
|
||||||
the function recursively applies the compile method to each argument
|
the function recursively applies the compile method to each argument
|
||||||
of the Item_func node.
|
of the Item_func node.
|
||||||
If the call of the method for an argument item returns a new item
|
If the call of the method for an argument item returns a new item
|
||||||
@@ -1788,7 +1788,7 @@ void Item_func_div::fix_length_and_dec()
|
|||||||
case TIME_RESULT:
|
case TIME_RESULT:
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
}
|
}
|
||||||
maybe_null= 1; // devision by zero
|
maybe_null= 1; // division by zero
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1862,7 +1862,7 @@ longlong Item_func_int_div::val_int()
|
|||||||
void Item_func_int_div::fix_length_and_dec()
|
void Item_func_int_div::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
Item_result argtype= args[0]->result_type();
|
Item_result argtype= args[0]->result_type();
|
||||||
/* use precision ony for the data type it is applicable for and valid */
|
/* use precision only for the data type it is applicable for and valid */
|
||||||
uint32 char_length= args[0]->max_char_length() -
|
uint32 char_length= args[0]->max_char_length() -
|
||||||
(argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
|
(argtype == DECIMAL_RESULT || argtype == INT_RESULT ?
|
||||||
args[0]->decimals : 0);
|
args[0]->decimals : 0);
|
||||||
@@ -4816,7 +4816,7 @@ bool Item_func_set_user_var::register_field_in_bitmap(uchar *arg)
|
|||||||
@param type type of new value
|
@param type type of new value
|
||||||
@param cs charset info for new value
|
@param cs charset info for new value
|
||||||
@param dv derivation for new value
|
@param dv derivation for new value
|
||||||
@param unsigned_arg indiates if a value of type INT_RESULT is unsigned
|
@param unsigned_arg indicates if a value of type INT_RESULT is unsigned
|
||||||
|
|
||||||
@note Sets error and fatal error if allocation fails.
|
@note Sets error and fatal error if allocation fails.
|
||||||
|
|
||||||
@@ -4894,7 +4894,7 @@ Item_func_set_user_var::update_hash(void *ptr, uint length,
|
|||||||
bool unsigned_arg)
|
bool unsigned_arg)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
If we set a variable explicitely to NULL then keep the old
|
If we set a variable explicitly to NULL then keep the old
|
||||||
result type of the variable
|
result type of the variable
|
||||||
*/
|
*/
|
||||||
if ((null_value= args[0]->null_value) && null_item)
|
if ((null_value= args[0]->null_value) && null_item)
|
||||||
@@ -6534,7 +6534,7 @@ void my_missing_function_error(const LEX_STRING &token, const char *func_name)
|
|||||||
@brief Initialize the result field by creating a temporary dummy table
|
@brief Initialize the result field by creating a temporary dummy table
|
||||||
and assign it to a newly created field object. Meta data used to
|
and assign it to a newly created field object. Meta data used to
|
||||||
create the field is fetched from the sp_head belonging to the stored
|
create the field is fetched from the sp_head belonging to the stored
|
||||||
proceedure found in the stored procedure functon cache.
|
procedure found in the stored procedure function cache.
|
||||||
|
|
||||||
@note This function should be called from fix_fields to init the result
|
@note This function should be called from fix_fields to init the result
|
||||||
field. It is some what related to Item_field.
|
field. It is some what related to Item_field.
|
||||||
@@ -6838,7 +6838,7 @@ Item_func_sp::fix_fields(THD *thd, Item **ref)
|
|||||||
/*
|
/*
|
||||||
Here we check privileges of the stored routine only during view
|
Here we check privileges of the stored routine only during view
|
||||||
creation, in order to validate the view. A runtime check is
|
creation, in order to validate the view. A runtime check is
|
||||||
perfomed in Item_func_sp::execute(), and this method is not
|
performed in Item_func_sp::execute(), and this method is not
|
||||||
called during context analysis. Notice, that during view
|
called during context analysis. Notice, that during view
|
||||||
creation we do not infer into stored routine bodies and do not
|
creation we do not infer into stored routine bodies and do not
|
||||||
check privileges of its statements, which would probably be a
|
check privileges of its statements, which would probably be a
|
||||||
|
@@ -206,7 +206,7 @@ String *Item_func_inet_str_base::val_str_ascii(String *buffer)
|
|||||||
|
|
||||||
@return Completion status.
|
@return Completion status.
|
||||||
@retval false Given string does not represent an IPv4-address.
|
@retval false Given string does not represent an IPv4-address.
|
||||||
@retval true The string has been converted sucessfully.
|
@retval true The string has been converted successfully.
|
||||||
|
|
||||||
@note The problem with inet_pton() is that it treats leading zeros in
|
@note The problem with inet_pton() is that it treats leading zeros in
|
||||||
IPv4-part differently on different platforms.
|
IPv4-part differently on different platforms.
|
||||||
@@ -331,7 +331,7 @@ static bool str_to_ipv4(const char *str, int str_length, in_addr *ipv4_address)
|
|||||||
|
|
||||||
@return Completion status.
|
@return Completion status.
|
||||||
@retval false Given string does not represent an IPv6-address.
|
@retval false Given string does not represent an IPv6-address.
|
||||||
@retval true The string has been converted sucessfully.
|
@retval true The string has been converted successfully.
|
||||||
|
|
||||||
@note The problem with inet_pton() is that it treats leading zeros in
|
@note The problem with inet_pton() is that it treats leading zeros in
|
||||||
IPv4-part differently on different platforms.
|
IPv4-part differently on different platforms.
|
||||||
@@ -677,7 +677,7 @@ static void ipv6_to_str(const in6_addr *ipv6, char *str)
|
|||||||
|
|
||||||
@return Completion status.
|
@return Completion status.
|
||||||
@retval false Given string does not represent an IP-address.
|
@retval false Given string does not represent an IP-address.
|
||||||
@retval true The string has been converted sucessfully.
|
@retval true The string has been converted successfully.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Item_func_inet6_aton::calc_value(const String *arg, String *buffer)
|
bool Item_func_inet6_aton::calc_value(const String *arg, String *buffer)
|
||||||
@@ -717,7 +717,7 @@ bool Item_func_inet6_aton::calc_value(const String *arg, String *buffer)
|
|||||||
|
|
||||||
@return Completion status.
|
@return Completion status.
|
||||||
@retval false The argument does not correspond to IP-address.
|
@retval false The argument does not correspond to IP-address.
|
||||||
@retval true The string has been converted sucessfully.
|
@retval true The string has been converted successfully.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Item_func_inet6_ntoa::calc_value(const String *arg, String *buffer)
|
bool Item_func_inet6_ntoa::calc_value(const String *arg, String *buffer)
|
||||||
|
@@ -923,7 +923,7 @@ String *Item_func_concat_ws::val_str(String *str)
|
|||||||
goto null; // Must be a blob
|
goto null; // Must be a blob
|
||||||
}
|
}
|
||||||
else if (res2 == &tmp_value)
|
else if (res2 == &tmp_value)
|
||||||
{ // This can happend only 1 time
|
{ // This can happen only 1 time
|
||||||
if (tmp_value.replace(0,0,*sep_str) || tmp_value.replace(0,0,*res))
|
if (tmp_value.replace(0,0,*sep_str) || tmp_value.replace(0,0,*res))
|
||||||
goto null;
|
goto null;
|
||||||
res= &tmp_value;
|
res= &tmp_value;
|
||||||
@@ -1071,7 +1071,7 @@ void Item_func_reverse::fix_length_and_dec()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Replace all occurences of string2 in string1 with string3.
|
Replace all occurrences of string2 in string1 with string3.
|
||||||
|
|
||||||
Don't reallocate val_str() if not needed.
|
Don't reallocate val_str() if not needed.
|
||||||
|
|
||||||
@@ -3839,7 +3839,7 @@ void Item_func_export_set::fix_length_and_dec()
|
|||||||
using in a SQL statement.
|
using in a SQL statement.
|
||||||
|
|
||||||
Adds a \\ before all characters that needs to be escaped in a SQL string.
|
Adds a \\ before all characters that needs to be escaped in a SQL string.
|
||||||
We also escape '^Z' (END-OF-FILE in windows) to avoid probelms when
|
We also escape '^Z' (END-OF-FILE in windows) to avoid problems when
|
||||||
running commands from a file in windows.
|
running commands from a file in windows.
|
||||||
|
|
||||||
This function is very useful when you want to generate SQL statements.
|
This function is very useful when you want to generate SQL statements.
|
||||||
|
@@ -1096,12 +1096,12 @@ void Item_singlerow_subselect::reset()
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
@todo
|
@todo
|
||||||
- We cant change name of Item_field or Item_ref, because it will
|
- We can't change name of Item_field or Item_ref, because it will
|
||||||
prevent it's correct resolving, but we should save name of
|
prevent its correct resolving, but we should save name of
|
||||||
removed item => we do not make optimization if top item of
|
removed item => we do not make optimization if top item of
|
||||||
list is field or reference.
|
list is field or reference.
|
||||||
- switch off this optimization for prepare statement,
|
- switch off this optimization for prepare statement,
|
||||||
because we do not rollback this changes.
|
because we do not rollback these changes.
|
||||||
Make rollback for it, or special name resolving mode in 5.0.
|
Make rollback for it, or special name resolving mode in 5.0.
|
||||||
|
|
||||||
@param join Join object of the subquery (i.e. 'child' join).
|
@param join Join object of the subquery (i.e. 'child' join).
|
||||||
@@ -1124,8 +1124,8 @@ Item_singlerow_subselect::select_transformer(JOIN *join)
|
|||||||
select_lex->item_list.elements == 1 &&
|
select_lex->item_list.elements == 1 &&
|
||||||
!select_lex->item_list.head()->with_sum_func &&
|
!select_lex->item_list.head()->with_sum_func &&
|
||||||
/*
|
/*
|
||||||
We cant change name of Item_field or Item_ref, because it will
|
We can't change name of Item_field or Item_ref, because it will
|
||||||
prevent it's correct resolving, but we should save name of
|
prevent its correct resolving, but we should save name of
|
||||||
removed item => we do not make optimization if top item of
|
removed item => we do not make optimization if top item of
|
||||||
list is field or reference.
|
list is field or reference.
|
||||||
TODO: solve above problem
|
TODO: solve above problem
|
||||||
@@ -1610,7 +1610,7 @@ longlong Item_exists_subselect::val_int()
|
|||||||
Return the result of EXISTS as a string value
|
Return the result of EXISTS as a string value
|
||||||
|
|
||||||
Converts the true/false result into a string value.
|
Converts the true/false result into a string value.
|
||||||
Note that currently this cannot be NULL, so if the query exection fails
|
Note that currently this cannot be NULL, so if the query execution fails
|
||||||
it will return 0.
|
it will return 0.
|
||||||
|
|
||||||
@param decimal_value[out] buffer to hold the resulting string value
|
@param decimal_value[out] buffer to hold the resulting string value
|
||||||
@@ -1633,7 +1633,7 @@ String *Item_exists_subselect::val_str(String *str)
|
|||||||
Return the result of EXISTS as a decimal value
|
Return the result of EXISTS as a decimal value
|
||||||
|
|
||||||
Converts the true/false result into a decimal value.
|
Converts the true/false result into a decimal value.
|
||||||
Note that currently this cannot be NULL, so if the query exection fails
|
Note that currently this cannot be NULL, so if the query execution fails
|
||||||
it will return 0.
|
it will return 0.
|
||||||
|
|
||||||
@param decimal_value[out] Buffer to hold the resulting decimal value
|
@param decimal_value[out] Buffer to hold the resulting decimal value
|
||||||
@@ -2280,7 +2280,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
|
|||||||
/*
|
/*
|
||||||
The uncacheable property controls a number of actions, e.g. whether to
|
The uncacheable property controls a number of actions, e.g. whether to
|
||||||
save/restore (via init_save_join_tab/restore_tmp) the original JOIN for
|
save/restore (via init_save_join_tab/restore_tmp) the original JOIN for
|
||||||
plans with a temp table where the original JOIN was overriden by
|
plans with a temp table where the original JOIN was overridden by
|
||||||
make_simple_join. The UNCACHEABLE_EXPLAIN is ignored by EXPLAIN, thus
|
make_simple_join. The UNCACHEABLE_EXPLAIN is ignored by EXPLAIN, thus
|
||||||
non-correlated subqueries will not appear as such to EXPLAIN.
|
non-correlated subqueries will not appear as such to EXPLAIN.
|
||||||
*/
|
*/
|
||||||
@@ -2327,7 +2327,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
|
|||||||
is_not_null_test(v3))
|
is_not_null_test(v3))
|
||||||
where is_not_null_test registers NULLs values but reject rows.
|
where is_not_null_test registers NULLs values but reject rows.
|
||||||
|
|
||||||
in case when we do not need correct NULL, we have simplier construction:
|
in case when we do not need correct NULL, we have simpler construction:
|
||||||
EXISTS (SELECT ... WHERE where and
|
EXISTS (SELECT ... WHERE where and
|
||||||
(l1 = v1) and
|
(l1 = v1) and
|
||||||
(l2 = v2) and
|
(l2 = v2) and
|
||||||
@@ -2580,7 +2580,7 @@ bool Item_in_subselect::create_in_to_exists_cond(JOIN *join_arg)
|
|||||||
/*
|
/*
|
||||||
The uncacheable property controls a number of actions, e.g. whether to
|
The uncacheable property controls a number of actions, e.g. whether to
|
||||||
save/restore (via init_save_join_tab/restore_tmp) the original JOIN for
|
save/restore (via init_save_join_tab/restore_tmp) the original JOIN for
|
||||||
plans with a temp table where the original JOIN was overriden by
|
plans with a temp table where the original JOIN was overridden by
|
||||||
make_simple_join. The UNCACHEABLE_EXPLAIN is ignored by EXPLAIN, thus
|
make_simple_join. The UNCACHEABLE_EXPLAIN is ignored by EXPLAIN, thus
|
||||||
non-correlated subqueries will not appear as such to EXPLAIN.
|
non-correlated subqueries will not appear as such to EXPLAIN.
|
||||||
*/
|
*/
|
||||||
@@ -3178,7 +3178,7 @@ Item_in_subselect::select_in_like_transformer(JOIN *join)
|
|||||||
/*
|
/*
|
||||||
In some optimisation cases we will not need this Item_in_optimizer
|
In some optimisation cases we will not need this Item_in_optimizer
|
||||||
object, but we can't know it here, but here we need address correct
|
object, but we can't know it here, but here we need address correct
|
||||||
reference on left expresion.
|
reference on left expression.
|
||||||
|
|
||||||
note: we won't need Item_in_optimizer when handling degenerate cases
|
note: we won't need Item_in_optimizer when handling degenerate cases
|
||||||
like "... IN (SELECT 1)"
|
like "... IN (SELECT 1)"
|
||||||
@@ -3210,7 +3210,7 @@ Item_in_subselect::select_in_like_transformer(JOIN *join)
|
|||||||
and all that items do not make permanent changes in current item arena
|
and all that items do not make permanent changes in current item arena
|
||||||
which allow to us call them with changed arena (if we do not know nature
|
which allow to us call them with changed arena (if we do not know nature
|
||||||
of Item, we have to call fix_fields() for it only with original arena to
|
of Item, we have to call fix_fields() for it only with original arena to
|
||||||
avoid memory leack)
|
avoid memory leak)
|
||||||
*/
|
*/
|
||||||
if (left_expr->cols() == 1)
|
if (left_expr->cols() == 1)
|
||||||
trans_res= single_value_transformer(join);
|
trans_res= single_value_transformer(join);
|
||||||
@@ -3373,7 +3373,7 @@ bool Item_in_subselect::setup_mat_engine()
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
The select_engine (that executes transformed IN=>EXISTS subselects) is
|
The select_engine (that executes transformed IN=>EXISTS subselects) is
|
||||||
pre-created at parse time, and is stored in statment memory (preserved
|
pre-created at parse time, and is stored in statement memory (preserved
|
||||||
across PS executions).
|
across PS executions).
|
||||||
*/
|
*/
|
||||||
DBUG_ASSERT(engine->engine_type() == subselect_engine::SINGLE_SELECT_ENGINE);
|
DBUG_ASSERT(engine->engine_type() == subselect_engine::SINGLE_SELECT_ENGINE);
|
||||||
@@ -3833,7 +3833,7 @@ int subselect_single_select_engine::exec()
|
|||||||
For at least one of the pushed predicates the following is true:
|
For at least one of the pushed predicates the following is true:
|
||||||
We should not apply optimizations based on the condition that was
|
We should not apply optimizations based on the condition that was
|
||||||
pushed down into the subquery. Those optimizations are ref[_or_null]
|
pushed down into the subquery. Those optimizations are ref[_or_null]
|
||||||
acceses. Change them to be full table scans.
|
accesses. Change them to be full table scans.
|
||||||
*/
|
*/
|
||||||
JOIN_TAB *tab;
|
JOIN_TAB *tab;
|
||||||
for (tab= first_linear_tab(join, WITH_BUSH_ROOTS, WITHOUT_CONST_TABLES);
|
for (tab= first_linear_tab(join, WITH_BUSH_ROOTS, WITHOUT_CONST_TABLES);
|
||||||
@@ -4742,7 +4742,7 @@ subselect_hash_sj_engine::choose_partial_match_strategy(
|
|||||||
/*
|
/*
|
||||||
Choose according to global optimizer switch. If only one of the switches is
|
Choose according to global optimizer switch. If only one of the switches is
|
||||||
'ON', then the remaining strategy is the only possible one. The only cases
|
'ON', then the remaining strategy is the only possible one. The only cases
|
||||||
when this will be overriden is when the total size of all buffers for the
|
when this will be overridden is when the total size of all buffers for the
|
||||||
merge strategy is bigger than the 'rowid_merge_buff_size' system variable,
|
merge strategy is bigger than the 'rowid_merge_buff_size' system variable,
|
||||||
or if there isn't enough physical memory to allocate the buffers.
|
or if there isn't enough physical memory to allocate the buffers.
|
||||||
*/
|
*/
|
||||||
@@ -6061,7 +6061,7 @@ int subselect_partial_match_engine::exec()
|
|||||||
if (has_covering_null_row)
|
if (has_covering_null_row)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
If there is a NULL-only row that coveres all columns the result of IN
|
If there is a NULL-only row that covers all columns the result of IN
|
||||||
is UNKNOWN.
|
is UNKNOWN.
|
||||||
*/
|
*/
|
||||||
item_in->value= 0;
|
item_in->value= 0;
|
||||||
@@ -6261,7 +6261,7 @@ subselect_rowid_merge_engine::init(MY_BITMAP *non_null_key_parts,
|
|||||||
for (uint i= (non_null_key ? 1 : 0); i < merge_keys_count; i++)
|
for (uint i= (non_null_key ? 1 : 0); i < merge_keys_count; i++)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Check if the first and only indexed column contains NULL in the curent
|
Check if the first and only indexed column contains NULL in the current
|
||||||
row, and add the row number to the corresponding key.
|
row, and add the row number to the corresponding key.
|
||||||
*/
|
*/
|
||||||
if (tmp_table->field[merge_keys[i]->get_field_idx(0)]->is_null())
|
if (tmp_table->field[merge_keys[i]->get_field_idx(0)]->is_null())
|
||||||
@@ -6472,7 +6472,7 @@ bool subselect_rowid_merge_engine::partial_match()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If all nullable columns contain only NULLs, then there is a guranteed
|
If all nullable columns contain only NULLs, then there is a guaranteed
|
||||||
partial match, and we don't need to search for a matching row.
|
partial match, and we don't need to search for a matching row.
|
||||||
*/
|
*/
|
||||||
if (has_covering_null_columns)
|
if (has_covering_null_columns)
|
||||||
|
@@ -541,7 +541,7 @@ public:
|
|||||||
bool jtbm_const_row_found;
|
bool jtbm_const_row_found;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TRUE<=>this is a flattenable semi-join, false overwise.
|
TRUE<=>this is a flattenable semi-join, false otherwise.
|
||||||
*/
|
*/
|
||||||
bool is_flattenable_semijoin;
|
bool is_flattenable_semijoin;
|
||||||
|
|
||||||
@@ -964,7 +964,7 @@ class subselect_indexsubquery_engine: public subselect_uniquesubquery_engine
|
|||||||
/* FALSE for 'ref', TRUE for 'ref-or-null'. */
|
/* FALSE for 'ref', TRUE for 'ref-or-null'. */
|
||||||
bool check_null;
|
bool check_null;
|
||||||
/*
|
/*
|
||||||
The "having" clause. This clause (further reffered to as "artificial
|
The "having" clause. This clause (further referred to as "artificial
|
||||||
having") was inserted by subquery transformation code. It contains
|
having") was inserted by subquery transformation code. It contains
|
||||||
Item(s) that have a side-effect: they record whether the subquery has
|
Item(s) that have a side-effect: they record whether the subquery has
|
||||||
produced a row with NULL certain components. We need to use it for cases
|
produced a row with NULL certain components. We need to use it for cases
|
||||||
@@ -985,7 +985,7 @@ class subselect_indexsubquery_engine: public subselect_uniquesubquery_engine
|
|||||||
However, subqueries like the above are currently not handled by index
|
However, subqueries like the above are currently not handled by index
|
||||||
lookup-based subquery engines, the engine applicability check misses
|
lookup-based subquery engines, the engine applicability check misses
|
||||||
them: it doesn't switch the engine for case of artificial having and
|
them: it doesn't switch the engine for case of artificial having and
|
||||||
[eq_]ref access (only for artifical having + ref_or_null or no having).
|
[eq_]ref access (only for artificial having + ref_or_null or no having).
|
||||||
The above example subquery is handled as a full-blown SELECT with eq_ref
|
The above example subquery is handled as a full-blown SELECT with eq_ref
|
||||||
access to one table.
|
access to one table.
|
||||||
|
|
||||||
@@ -1056,7 +1056,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
JOIN *materialize_join;
|
JOIN *materialize_join;
|
||||||
/*
|
/*
|
||||||
A conjunction of all the equality condtions between all pairs of expressions
|
A conjunction of all the equality conditions between all pairs of expressions
|
||||||
that are arguments of an IN predicate. We need these to post-filter some
|
that are arguments of an IN predicate. We need these to post-filter some
|
||||||
IN results because index lookups sometimes match values that are actually
|
IN results because index lookups sometimes match values that are actually
|
||||||
not equal to the search key in SQL terms.
|
not equal to the search key in SQL terms.
|
||||||
|
@@ -527,7 +527,7 @@ Field *Item_sum::create_tmp_field(bool group, TABLE *table)
|
|||||||
break;
|
break;
|
||||||
case ROW_RESULT:
|
case ROW_RESULT:
|
||||||
case TIME_RESULT:
|
case TIME_RESULT:
|
||||||
// This case should never be choosen
|
// This case should never be chosen
|
||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -717,7 +717,7 @@ calc_tmp_field_type(enum enum_field_types table_field_type,
|
|||||||
|
|
||||||
C_MODE_START
|
C_MODE_START
|
||||||
|
|
||||||
/* Declarations for auxilary C-callbacks */
|
/* Declarations for auxiliary C-callbacks */
|
||||||
|
|
||||||
int simple_raw_key_cmp(void* arg, const void* key1, const void* key2)
|
int simple_raw_key_cmp(void* arg, const void* key1, const void* key2)
|
||||||
{
|
{
|
||||||
@@ -749,7 +749,7 @@ C_MODE_END
|
|||||||
@param thd Thread descriptor
|
@param thd Thread descriptor
|
||||||
@return status
|
@return status
|
||||||
@retval FALSE success
|
@retval FALSE success
|
||||||
@retval TRUE faliure
|
@retval TRUE failure
|
||||||
|
|
||||||
Prepares Aggregator_distinct to process the incoming stream.
|
Prepares Aggregator_distinct to process the incoming stream.
|
||||||
Creates the temporary table and the Unique class if needed.
|
Creates the temporary table and the Unique class if needed.
|
||||||
@@ -1215,7 +1215,7 @@ Item_sum_hybrid::fix_fields(THD *thd, Item **ref)
|
|||||||
DBUG_ASSERT(0);
|
DBUG_ASSERT(0);
|
||||||
};
|
};
|
||||||
setup_hybrid(thd, args[0], NULL);
|
setup_hybrid(thd, args[0], NULL);
|
||||||
/* MIN/MAX can return NULL for empty set indepedent of the used column */
|
/* MIN/MAX can return NULL for empty set independent of the used column */
|
||||||
maybe_null= 1;
|
maybe_null= 1;
|
||||||
result_field=0;
|
result_field=0;
|
||||||
null_value=1;
|
null_value=1;
|
||||||
@@ -1630,7 +1630,7 @@ void Item_sum_count::cleanup()
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Avgerage
|
Average
|
||||||
*/
|
*/
|
||||||
void Item_sum_avg::fix_length_and_dec()
|
void Item_sum_avg::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
@@ -1863,7 +1863,7 @@ void Item_sum_variance::fix_length_and_dec()
|
|||||||
/*
|
/*
|
||||||
According to the SQL2003 standard (Part 2, Foundations; sec 10.9,
|
According to the SQL2003 standard (Part 2, Foundations; sec 10.9,
|
||||||
aggregate function; paragraph 7h of Syntax Rules), "the declared
|
aggregate function; paragraph 7h of Syntax Rules), "the declared
|
||||||
type of the result is an implementation-defined aproximate numeric
|
type of the result is an implementation-defined approximate numeric
|
||||||
type.
|
type.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1953,7 +1953,7 @@ double Item_sum_variance::val_real()
|
|||||||
is one or zero. If it's zero, i.e. a population variance, then we only
|
is one or zero. If it's zero, i.e. a population variance, then we only
|
||||||
set nullness when the count is zero.
|
set nullness when the count is zero.
|
||||||
|
|
||||||
Another way to read it is that 'sample' is the numerical threshhold, at and
|
Another way to read it is that 'sample' is the numerical threshold, at and
|
||||||
below which a 'count' number of items is called NULL.
|
below which a 'count' number of items is called NULL.
|
||||||
*/
|
*/
|
||||||
DBUG_ASSERT((sample == 0) || (sample == 1));
|
DBUG_ASSERT((sample == 0) || (sample == 1));
|
||||||
@@ -3567,7 +3567,7 @@ bool Item_func_group_concat::setup(THD *thd)
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
Force the create_tmp_table() to convert BIT columns to INT
|
Force the create_tmp_table() to convert BIT columns to INT
|
||||||
as we cannot compare two table records containg BIT fields
|
as we cannot compare two table records containing BIT fields
|
||||||
stored in the the tree used for distinct/order by.
|
stored in the the tree used for distinct/order by.
|
||||||
Moreover we don't even save in the tree record null bits
|
Moreover we don't even save in the tree record null bits
|
||||||
where BIT fields store parts of their data.
|
where BIT fields store parts of their data.
|
||||||
|
@@ -250,7 +250,7 @@ class st_select_lex;
|
|||||||
The field 'aggr_level' is to contain the nest level of the subquery
|
The field 'aggr_level' is to contain the nest level of the subquery
|
||||||
where the set function is aggregated.
|
where the set function is aggregated.
|
||||||
|
|
||||||
The field 'max_arg_level' is for the maximun of the nest levels of the
|
The field 'max_arg_level' is for the maximum of the nest levels of the
|
||||||
unbound column references occurred in the set function. A column reference
|
unbound column references occurred in the set function. A column reference
|
||||||
is unbound within a set function if it is not bound by any subquery
|
is unbound within a set function if it is not bound by any subquery
|
||||||
used as a subexpression in this function. A column reference is bound by
|
used as a subexpression in this function. A column reference is bound by
|
||||||
|
@@ -452,7 +452,7 @@ err:
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Create a formated date/time value in a string.
|
Create a formatted date/time value in a string.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool make_date_time(const LEX_CSTRING &format, MYSQL_TIME *l_time,
|
static bool make_date_time(const LEX_CSTRING &format, MYSQL_TIME *l_time,
|
||||||
@@ -1028,7 +1028,7 @@ uint week_mode(uint mode)
|
|||||||
a date at start of january) In this case one can get 53 for the
|
a date at start of january) In this case one can get 53 for the
|
||||||
first week of next year. This flag ensures that the week is
|
first week of next year. This flag ensures that the week is
|
||||||
relevant for the given year. Note that this flag is only
|
relevant for the given year. Note that this flag is only
|
||||||
releveant if WEEK_JANUARY is not set.
|
relevant if WEEK_JANUARY is not set.
|
||||||
|
|
||||||
If set Week is in range 1-53.
|
If set Week is in range 1-53.
|
||||||
|
|
||||||
@@ -1337,7 +1337,7 @@ bool get_interval_value(Item *args,interval_type int_type, INTERVAL *interval)
|
|||||||
if (!(res= args->val_str_ascii(&str_value)))
|
if (!(res= args->val_str_ascii(&str_value)))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
/* record negative intervalls in interval->neg */
|
/* record negative intervals in interval->neg */
|
||||||
str=res->ptr();
|
str=res->ptr();
|
||||||
cs= res->charset();
|
cs= res->charset();
|
||||||
const char *end=str+res->length();
|
const char *end=str+res->length();
|
||||||
@@ -1599,7 +1599,7 @@ void Item_func_curdate::fix_length_and_dec()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for local
|
Converts current time in my_time_t to MYSQL_TIME representation for local
|
||||||
time zone. Defines time zone (local) used for whole CURDATE function.
|
time zone. Defines time zone (local) used for whole CURDATE function.
|
||||||
*/
|
*/
|
||||||
void Item_func_curdate_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_curdate_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -1611,7 +1611,7 @@ void Item_func_curdate_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for UTC
|
Converts current time in my_time_t to MYSQL_TIME representation for UTC
|
||||||
time zone. Defines time zone (UTC) used for whole UTC_DATE function.
|
time zone. Defines time zone (UTC) used for whole UTC_DATE function.
|
||||||
*/
|
*/
|
||||||
void Item_func_curdate_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_curdate_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -1664,7 +1664,7 @@ static void set_sec_part(ulong sec_part, MYSQL_TIME *ltime, Item *item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for local
|
Converts current time in my_time_t to MYSQL_TIME representation for local
|
||||||
time zone. Defines time zone (local) used for whole CURTIME function.
|
time zone. Defines time zone (local) used for whole CURTIME function.
|
||||||
*/
|
*/
|
||||||
void Item_func_curtime_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_curtime_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -1679,7 +1679,7 @@ void Item_func_curtime_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for UTC
|
Converts current time in my_time_t to MYSQL_TIME representation for UTC
|
||||||
time zone. Defines time zone (UTC) used for whole UTC_TIME function.
|
time zone. Defines time zone (UTC) used for whole UTC_TIME function.
|
||||||
*/
|
*/
|
||||||
void Item_func_curtime_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_curtime_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -1707,7 +1707,7 @@ bool Item_func_now::fix_fields(THD *thd, Item **items)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for local
|
Converts current time in my_time_t to MYSQL_TIME representation for local
|
||||||
time zone. Defines time zone (local) used for whole NOW function.
|
time zone. Defines time zone (local) used for whole NOW function.
|
||||||
*/
|
*/
|
||||||
void Item_func_now_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_now_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -1720,7 +1720,7 @@ void Item_func_now_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for UTC
|
Converts current time in my_time_t to MYSQL_TIME representation for UTC
|
||||||
time zone. Defines time zone (UTC) used for whole UTC_TIMESTAMP function.
|
time zone. Defines time zone (UTC) used for whole UTC_TIMESTAMP function.
|
||||||
*/
|
*/
|
||||||
void Item_func_now_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_now_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -1744,7 +1744,7 @@ bool Item_func_now::get_date(MYSQL_TIME *res,
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts current time in my_time_t to MYSQL_TIME represenatation for local
|
Converts current time in my_time_t to MYSQL_TIME representation for local
|
||||||
time zone. Defines time zone (local) used for whole SYSDATE function.
|
time zone. Defines time zone (local) used for whole SYSDATE function.
|
||||||
*/
|
*/
|
||||||
void Item_func_sysdate_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
void Item_func_sysdate_local::store_now_in_TIME(MYSQL_TIME *now_time)
|
||||||
@@ -2055,7 +2055,7 @@ bool Item_func_convert_tz::get_date(MYSQL_TIME *ltime,
|
|||||||
uint not_used;
|
uint not_used;
|
||||||
my_time_tmp= from_tz->TIME_to_gmt_sec(ltime, ¬_used);
|
my_time_tmp= from_tz->TIME_to_gmt_sec(ltime, ¬_used);
|
||||||
ulong sec_part= ltime->second_part;
|
ulong sec_part= ltime->second_part;
|
||||||
/* my_time_tmp is guranteed to be in the allowed range */
|
/* my_time_tmp is guaranteed to be in the allowed range */
|
||||||
if (my_time_tmp)
|
if (my_time_tmp)
|
||||||
to_tz->gmt_sec_to_TIME(ltime, my_time_tmp);
|
to_tz->gmt_sec_to_TIME(ltime, my_time_tmp);
|
||||||
/* we rely on the fact that no timezone conversion can change sec_part */
|
/* we rely on the fact that no timezone conversion can change sec_part */
|
||||||
@@ -2497,7 +2497,7 @@ void Item_char_typecast::fix_length_and_dec()
|
|||||||
uint32 char_length;
|
uint32 char_length;
|
||||||
/*
|
/*
|
||||||
We always force character set conversion if cast_cs
|
We always force character set conversion if cast_cs
|
||||||
is a multi-byte character set. It garantees that the
|
is a multi-byte character set. It guarantees that the
|
||||||
result of CAST is a well-formed string.
|
result of CAST is a well-formed string.
|
||||||
For single-byte character sets we allow just to copy
|
For single-byte character sets we allow just to copy
|
||||||
from the argument. A single-byte character sets string
|
from the argument. A single-byte character sets string
|
||||||
|
@@ -68,7 +68,7 @@ typedef struct my_xml_node_st
|
|||||||
} MY_XML_NODE;
|
} MY_XML_NODE;
|
||||||
|
|
||||||
|
|
||||||
/* Lexical analizer token */
|
/* Lexical analyzer token */
|
||||||
typedef struct my_xpath_lex_st
|
typedef struct my_xpath_lex_st
|
||||||
{
|
{
|
||||||
int term; /* token type, see MY_XPATH_LEX_XXXXX below */
|
int term; /* token type, see MY_XPATH_LEX_XXXXX below */
|
||||||
@@ -1078,7 +1078,7 @@ static Item* nametestfunc(MY_XPATH *xpath,
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Tokens consisting of one character, for faster lexical analizer.
|
Tokens consisting of one character, for faster lexical analyzer.
|
||||||
*/
|
*/
|
||||||
static char simpletok[128]=
|
static char simpletok[128]=
|
||||||
{
|
{
|
||||||
@@ -1398,7 +1398,7 @@ my_xpath_function(const char *beg, const char *end)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Initialize a lex analizer token */
|
/* Initialize a lex analyzer token */
|
||||||
static void
|
static void
|
||||||
my_xpath_lex_init(MY_XPATH_LEX *lex,
|
my_xpath_lex_init(MY_XPATH_LEX *lex,
|
||||||
const char *str, const char *strend)
|
const char *str, const char *strend)
|
||||||
@@ -1429,7 +1429,7 @@ my_xdigit(int c)
|
|||||||
SYNOPSYS
|
SYNOPSYS
|
||||||
Scan the next token from the input.
|
Scan the next token from the input.
|
||||||
lex->term is set to the scanned token type.
|
lex->term is set to the scanned token type.
|
||||||
lex->beg and lex->end are set to the beginnig
|
lex->beg and lex->end are set to the beginning
|
||||||
and to the end of the token.
|
and to the end of the token.
|
||||||
RETURN
|
RETURN
|
||||||
N/A
|
N/A
|
||||||
@@ -1455,7 +1455,7 @@ my_xpath_lex_scan(MY_XPATH *xpath,
|
|||||||
(const uchar*) end)) > 0 &&
|
(const uchar*) end)) > 0 &&
|
||||||
((ctype & (_MY_L | _MY_U)) || *beg == '_'))
|
((ctype & (_MY_L | _MY_U)) || *beg == '_'))
|
||||||
{
|
{
|
||||||
// scan untill the end of the idenfitier
|
// scan until the end of the identifier
|
||||||
for (beg+= length;
|
for (beg+= length;
|
||||||
(length= xpath->cs->cset->ctype(xpath->cs, &ctype,
|
(length= xpath->cs->cset->ctype(xpath->cs, &ctype,
|
||||||
(const uchar*) beg,
|
(const uchar*) beg,
|
||||||
@@ -1584,7 +1584,7 @@ static int my_xpath_parse_AxisName(MY_XPATH *xpath)
|
|||||||
** Grammar rules, according to http://www.w3.org/TR/xpath
|
** Grammar rules, according to http://www.w3.org/TR/xpath
|
||||||
** Implemented using recursive descendant method.
|
** Implemented using recursive descendant method.
|
||||||
** All the following grammar processing functions accept
|
** All the following grammar processing functions accept
|
||||||
** a signle "xpath" argument and return 1 on success and 0 on error.
|
** a single "xpath" argument and return 1 on success and 0 on error.
|
||||||
** They also modify "xpath" argument by creating new items.
|
** They also modify "xpath" argument by creating new items.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -2464,7 +2464,7 @@ static int my_xpath_parse_UnaryExpr(MY_XPATH *xpath)
|
|||||||
as it is in conflict with abbreviated step.
|
as it is in conflict with abbreviated step.
|
||||||
1 + .123 does not work,
|
1 + .123 does not work,
|
||||||
1 + 0.123 does.
|
1 + 0.123 does.
|
||||||
Perhaps it is better to move this code into lex analizer.
|
Perhaps it is better to move this code into lex analyzer.
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
1 - success
|
1 - success
|
||||||
@@ -2809,7 +2809,7 @@ append_node(String *str, MY_XML_NODE *node)
|
|||||||
SYNOPSYS
|
SYNOPSYS
|
||||||
|
|
||||||
A call-back function executed when XML parser
|
A call-back function executed when XML parser
|
||||||
is entering a tag or an attribue.
|
is entering a tag or an attribute.
|
||||||
Appends the new node into data->pxml.
|
Appends the new node into data->pxml.
|
||||||
Increments data->level.
|
Increments data->level.
|
||||||
|
|
||||||
@@ -2845,7 +2845,7 @@ int xml_enter(MY_XML_PARSER *st,const char *attr, size_t len)
|
|||||||
SYNOPSYS
|
SYNOPSYS
|
||||||
|
|
||||||
A call-back function executed when XML parser
|
A call-back function executed when XML parser
|
||||||
is entering into a tag or an attribue textual value.
|
is entering into a tag or an attribute textual value.
|
||||||
The value is appended into data->pxml.
|
The value is appended into data->pxml.
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
@@ -2873,7 +2873,7 @@ int xml_value(MY_XML_PARSER *st,const char *attr, size_t len)
|
|||||||
SYNOPSYS
|
SYNOPSYS
|
||||||
|
|
||||||
A call-back function executed when XML parser
|
A call-back function executed when XML parser
|
||||||
is leaving a tag or an attribue.
|
is leaving a tag or an attribute.
|
||||||
Decrements data->level.
|
Decrements data->level.
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
@@ -230,7 +230,7 @@ void key_restore(uchar *to_record, uchar *from_key, KEY *key_info,
|
|||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
This in fact never happens, as we have only partial BLOB
|
This in fact never happens, as we have only partial BLOB
|
||||||
keys yet anyway, so it's difficult to find any sence to
|
keys yet anyway, so it's difficult to find any sense to
|
||||||
restore the part of a record.
|
restore the part of a record.
|
||||||
Maybe this branch is to be removed, but now we
|
Maybe this branch is to be removed, but now we
|
||||||
have to ignore GCov compaining.
|
have to ignore GCov compaining.
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
#include "lex_symbol.h"
|
#include "lex_symbol.h"
|
||||||
|
|
||||||
SYM_GROUP sym_group_common= {"", ""};
|
SYM_GROUP sym_group_common= {"", ""};
|
||||||
SYM_GROUP sym_group_geom= {"Spatial extentions", "HAVE_SPATIAL"};
|
SYM_GROUP sym_group_geom= {"Spatial extensions", "HAVE_SPATIAL"};
|
||||||
SYM_GROUP sym_group_rtree= {"RTree keys", "HAVE_RTREE_KEYS"};
|
SYM_GROUP sym_group_rtree= {"RTree keys", "HAVE_RTREE_KEYS"};
|
||||||
|
|
||||||
/* We don't want to include sql_yacc.h into gen_lex_hash */
|
/* We don't want to include sql_yacc.h into gen_lex_hash */
|
||||||
|
@@ -1069,7 +1069,7 @@ bool Global_read_lock::make_global_read_lock_block_commit(THD *thd)
|
|||||||
MDL_request mdl_request;
|
MDL_request mdl_request;
|
||||||
DBUG_ENTER("make_global_read_lock_block_commit");
|
DBUG_ENTER("make_global_read_lock_block_commit");
|
||||||
/*
|
/*
|
||||||
If we didn't succeed lock_global_read_lock(), or if we already suceeded
|
If we didn't succeed lock_global_read_lock(), or if we already succeeded
|
||||||
make_global_read_lock_block_commit(), do nothing.
|
make_global_read_lock_block_commit(), do nothing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
20
sql/log.cc
20
sql/log.cc
@@ -141,7 +141,7 @@ static rpl_binlog_state rpl_global_gtid_binlog_state;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
purge logs, master and slave sides both, related error code
|
purge logs, master and slave sides both, related error code
|
||||||
convertor.
|
converter.
|
||||||
Called from @c purge_error_message(), @c MYSQL_BIN_LOG::reset_logs()
|
Called from @c purge_error_message(), @c MYSQL_BIN_LOG::reset_logs()
|
||||||
|
|
||||||
@param res an internal to purging routines error code
|
@param res an internal to purging routines error code
|
||||||
@@ -350,7 +350,7 @@ public:
|
|||||||
never zero.
|
never zero.
|
||||||
|
|
||||||
This is done while calling the constructor binlog_cache_mngr.
|
This is done while calling the constructor binlog_cache_mngr.
|
||||||
We cannot set informaton in the constructor binlog_cache_data
|
We cannot set information in the constructor binlog_cache_data
|
||||||
because the space for binlog_cache_mngr is allocated through
|
because the space for binlog_cache_mngr is allocated through
|
||||||
a placement new.
|
a placement new.
|
||||||
|
|
||||||
@@ -2958,7 +2958,7 @@ bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time,
|
|||||||
|
|
||||||
mysql_mutex_lock(&LOCK_log);
|
mysql_mutex_lock(&LOCK_log);
|
||||||
if (is_open())
|
if (is_open())
|
||||||
{ // Safety agains reopen
|
{ // Safety against reopen
|
||||||
int tmp_errno= 0;
|
int tmp_errno= 0;
|
||||||
char buff[80], *end;
|
char buff[80], *end;
|
||||||
char query_time_buff[22+7], lock_time_buff[22+7];
|
char query_time_buff[22+7], lock_time_buff[22+7];
|
||||||
@@ -3233,7 +3233,7 @@ void MYSQL_BIN_LOG::cleanup()
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Free data for global binlog state.
|
Free data for global binlog state.
|
||||||
We can't do that automaticly as we need to do this before
|
We can't do that automatically as we need to do this before
|
||||||
safemalloc is shut down
|
safemalloc is shut down
|
||||||
*/
|
*/
|
||||||
if (!is_relay_log)
|
if (!is_relay_log)
|
||||||
@@ -4004,7 +4004,7 @@ err:
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Delete all logs refered to in the index file.
|
Delete all logs referred to in the index file.
|
||||||
|
|
||||||
The new index file will only contain this file.
|
The new index file will only contain this file.
|
||||||
|
|
||||||
@@ -4406,7 +4406,7 @@ int MYSQL_BIN_LOG::purge_first_log(Relay_log_info* rli, bool included)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Need to update the log pos because purge logs has been called
|
* Need to update the log pos because purge logs has been called
|
||||||
* after fetching initially the log pos at the begining of the method.
|
* after fetching initially the log pos at the beginning of the method.
|
||||||
*/
|
*/
|
||||||
if ((errcode= find_log_pos(&rli->linfo, rli->event_relay_log_name, 0)))
|
if ((errcode= find_log_pos(&rli->linfo, rli->event_relay_log_name, 0)))
|
||||||
{
|
{
|
||||||
@@ -5563,7 +5563,7 @@ binlog_cache_mngr *THD::binlog_setup_trx_data()
|
|||||||
|
|
||||||
- Start a statement transaction to allow us to truncate the cache.
|
- Start a statement transaction to allow us to truncate the cache.
|
||||||
|
|
||||||
- Save the currrent binlog position so that we can roll back the
|
- Save the current binlog position so that we can roll back the
|
||||||
statement by truncating the cache.
|
statement by truncating the cache.
|
||||||
|
|
||||||
We only update the saved position if the old one was undefined,
|
We only update the saved position if the old one was undefined,
|
||||||
@@ -6743,7 +6743,7 @@ static const char* get_first_binlog(char* buf_arg)
|
|||||||
}
|
}
|
||||||
if (normalize_binlog_name(buf_arg, fname, false))
|
if (normalize_binlog_name(buf_arg, fname, false))
|
||||||
{
|
{
|
||||||
errmsg= "cound not normalize the first file name in the binlog index";
|
errmsg= "could not normalize the first file name in the binlog index";
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
@@ -9706,7 +9706,7 @@ TC_LOG_BINLOG::mark_xid_done(ulong binlog_id, bool write_checkpoint)
|
|||||||
than compare all found against each other to find the one pointing to the
|
than compare all found against each other to find the one pointing to the
|
||||||
most recent binlog.
|
most recent binlog.
|
||||||
|
|
||||||
Note also that we need to first release LOCK_xid_list, then aquire
|
Note also that we need to first release LOCK_xid_list, then acquire
|
||||||
LOCK_log, then re-aquire LOCK_xid_list. If we were to take LOCK_log while
|
LOCK_log, then re-aquire LOCK_xid_list. If we were to take LOCK_log while
|
||||||
holding LOCK_xid_list, we might deadlock with other threads that take the
|
holding LOCK_xid_list, we might deadlock with other threads that take the
|
||||||
locks in the opposite order.
|
locks in the opposite order.
|
||||||
@@ -9780,7 +9780,7 @@ TC_LOG_BINLOG::commit_checkpoint_notify(void *cookie)
|
|||||||
necessary stuff.
|
necessary stuff.
|
||||||
|
|
||||||
In the future, this thread could also be used to do log rotation in the
|
In the future, this thread could also be used to do log rotation in the
|
||||||
background, which could elimiate all stalls around binlog rotations.
|
background, which could eliminate all stalls around binlog rotations.
|
||||||
*/
|
*/
|
||||||
pthread_handler_t
|
pthread_handler_t
|
||||||
binlog_background_thread(void *arg __attribute__((unused)))
|
binlog_background_thread(void *arg __attribute__((unused)))
|
||||||
|
@@ -3444,7 +3444,7 @@ get_str_len_and_pointer(const Log_event::Byte **src,
|
|||||||
const Log_event::Byte *end)
|
const Log_event::Byte *end)
|
||||||
{
|
{
|
||||||
if (*src >= end)
|
if (*src >= end)
|
||||||
return -1; // Will be UINT_MAX in two-complement arithmetics
|
return -1; // Will be UINT_MAX in two-complement arithmetic
|
||||||
uint length= **src;
|
uint length= **src;
|
||||||
if (length > 0)
|
if (length > 0)
|
||||||
{
|
{
|
||||||
@@ -3810,7 +3810,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len,
|
|||||||
|
|
||||||
/* A 2nd variable part; this is common to all versions */
|
/* A 2nd variable part; this is common to all versions */
|
||||||
memcpy((char*) start, end, data_len); // Copy db and query
|
memcpy((char*) start, end, data_len); // Copy db and query
|
||||||
start[data_len]= '\0'; // End query with \0 (For safetly)
|
start[data_len]= '\0'; // End query with \0 (For safety)
|
||||||
db= (char *)start;
|
db= (char *)start;
|
||||||
query= (char *)(start + db_len + 1);
|
query= (char *)(start + db_len + 1);
|
||||||
q_len= data_len - db_len -1;
|
q_len= data_len - db_len -1;
|
||||||
@@ -5403,7 +5403,7 @@ int Format_description_log_event::do_update_pos(rpl_group_info *rgi)
|
|||||||
If we do not skip stepping the group log position (and the
|
If we do not skip stepping the group log position (and the
|
||||||
server id was changed when restarting the server), it might well
|
server id was changed when restarting the server), it might well
|
||||||
be that we start executing at a position that is invalid, e.g.,
|
be that we start executing at a position that is invalid, e.g.,
|
||||||
at a Rows_log_event or a Query_log_event preceeded by a
|
at a Rows_log_event or a Query_log_event preceded by a
|
||||||
Intvar_log_event instead of starting at a Table_map_log_event or
|
Intvar_log_event instead of starting at a Table_map_log_event or
|
||||||
the Intvar_log_event respectively.
|
the Intvar_log_event respectively.
|
||||||
*/
|
*/
|
||||||
@@ -5515,7 +5515,7 @@ Format_description_log_event::is_version_before_checksum(const master_version_sp
|
|||||||
|
|
||||||
@return the version-safe checksum alg descriptor where zero
|
@return the version-safe checksum alg descriptor where zero
|
||||||
designates no checksum, 255 - the orginator is
|
designates no checksum, 255 - the orginator is
|
||||||
checksum-unaware (effectively no checksum) and the actuall
|
checksum-unaware (effectively no checksum) and the actual
|
||||||
[1-254] range alg descriptor.
|
[1-254] range alg descriptor.
|
||||||
*/
|
*/
|
||||||
enum enum_binlog_checksum_alg get_checksum_alg(const char* buf, ulong len)
|
enum enum_binlog_checksum_alg get_checksum_alg(const char* buf, ulong len)
|
||||||
@@ -6221,7 +6221,7 @@ int Load_log_event::do_apply_event(NET* net, rpl_group_info *rgi,
|
|||||||
/*
|
/*
|
||||||
When replication is running fine, if it was DUP_ERROR on the
|
When replication is running fine, if it was DUP_ERROR on the
|
||||||
master then we could choose IGNORE here, because if DUP_ERROR
|
master then we could choose IGNORE here, because if DUP_ERROR
|
||||||
suceeded on master, and data is identical on the master and slave,
|
succeeded on master, and data is identical on the master and slave,
|
||||||
then there should be no uniqueness errors on slave, so IGNORE is
|
then there should be no uniqueness errors on slave, so IGNORE is
|
||||||
the same as DUP_ERROR. But in the unlikely case of uniqueness errors
|
the same as DUP_ERROR. But in the unlikely case of uniqueness errors
|
||||||
(because the data on the master and slave happen to be different
|
(because the data on the master and slave happen to be different
|
||||||
@@ -6754,7 +6754,7 @@ Gtid_log_event::Gtid_log_event(THD *thd_arg, uint64 seq_no_arg,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Used to record GTID while sending binlog to slave, without having to
|
Used to record GTID while sending binlog to slave, without having to
|
||||||
fully contruct every Gtid_log_event() needlessly.
|
fully construct every Gtid_log_event() needlessly.
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
Gtid_log_event::peek(const char *event_start, size_t event_len,
|
Gtid_log_event::peek(const char *event_start, size_t event_len,
|
||||||
@@ -7276,7 +7276,7 @@ Gtid_list_log_event::print(FILE *file, PRINT_EVENT_INFO *print_event_info)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
Used to record gtid_list event while sending binlog to slave, without having to
|
Used to record gtid_list event while sending binlog to slave, without having to
|
||||||
fully contruct the event object.
|
fully construct the event object.
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
Gtid_list_log_event::peek(const char *event_start, uint32 event_len,
|
Gtid_list_log_event::peek(const char *event_start, uint32 event_len,
|
||||||
@@ -7356,7 +7356,7 @@ Intvar_log_event::Intvar_log_event(const char* buf,
|
|||||||
const Format_description_log_event* description_event)
|
const Format_description_log_event* description_event)
|
||||||
:Log_event(buf, description_event)
|
:Log_event(buf, description_event)
|
||||||
{
|
{
|
||||||
/* The Post-Header is empty. The Varible Data part begins immediately. */
|
/* The Post-Header is empty. The Variable Data part begins immediately. */
|
||||||
buf+= description_event->common_header_len +
|
buf+= description_event->common_header_len +
|
||||||
description_event->post_header_len[INTVAR_EVENT-1];
|
description_event->post_header_len[INTVAR_EVENT-1];
|
||||||
type= buf[I_TYPE_OFFSET];
|
type= buf[I_TYPE_OFFSET];
|
||||||
@@ -8135,7 +8135,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
|
|||||||
return;
|
return;
|
||||||
str_to_hex(hex_str, val, val_len);
|
str_to_hex(hex_str, val, val_len);
|
||||||
/*
|
/*
|
||||||
For proper behaviour when mysqlbinlog|mysql, we need to explicitely
|
For proper behaviour when mysqlbinlog|mysql, we need to explicitly
|
||||||
specify the variable's collation. It will however cause problems when
|
specify the variable's collation. It will however cause problems when
|
||||||
people want to mysqlbinlog|mysql into another server not supporting the
|
people want to mysqlbinlog|mysql into another server not supporting the
|
||||||
character set. But there's not much to do about this and it's unlikely.
|
character set. But there's not much to do about this and it's unlikely.
|
||||||
@@ -8584,7 +8584,7 @@ void Create_file_log_event::pack_info(Protocol *protocol)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Create_file_log_event::do_apply_event()
|
Create_file_log_event::do_apply_event()
|
||||||
Constructor for Create_file_log_event to intantiate an event
|
Constructor for Create_file_log_event to instantiate an event
|
||||||
from the relay log on the slave.
|
from the relay log on the slave.
|
||||||
|
|
||||||
@retval
|
@retval
|
||||||
@@ -9629,7 +9629,7 @@ Rows_log_event::Rows_log_event(const char *buf, uint event_len,
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if my_bitmap_init fails, catched in is_valid() */
|
/* if my_bitmap_init fails, caught in is_valid() */
|
||||||
if (likely(!my_bitmap_init(&m_cols,
|
if (likely(!my_bitmap_init(&m_cols,
|
||||||
m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL,
|
m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL,
|
||||||
m_width,
|
m_width,
|
||||||
@@ -10010,7 +10010,7 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
DBUG_PRINT("debug", ("Checking compability of tables to lock - tables_to_lock: %p",
|
DBUG_PRINT("debug", ("Checking compatibility of tables to lock - tables_to_lock: %p",
|
||||||
rgi->tables_to_lock));
|
rgi->tables_to_lock));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -10065,7 +10065,7 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
|
|||||||
ptr->table->s->table_name.str));
|
ptr->table->s->table_name.str));
|
||||||
/*
|
/*
|
||||||
We should not honour --slave-skip-errors at this point as we are
|
We should not honour --slave-skip-errors at this point as we are
|
||||||
having severe errors which should not be skiped.
|
having severe errors which should not be skipped.
|
||||||
*/
|
*/
|
||||||
thd->is_slave_error= 1;
|
thd->is_slave_error= 1;
|
||||||
/* remove trigger's tables */
|
/* remove trigger's tables */
|
||||||
@@ -10446,7 +10446,7 @@ static int rows_event_stmt_cleanup(rpl_group_info *rgi, THD * thd)
|
|||||||
/**
|
/**
|
||||||
The method either increments the relay log position or
|
The method either increments the relay log position or
|
||||||
commits the current statement and increments the master group
|
commits the current statement and increments the master group
|
||||||
possition if the event is STMT_END_F flagged and
|
position if the event is STMT_END_F flagged and
|
||||||
the statement corresponds to the autocommit query (i.e replicated
|
the statement corresponds to the autocommit query (i.e replicated
|
||||||
without wrapping in BEGIN/COMMIT)
|
without wrapping in BEGIN/COMMIT)
|
||||||
|
|
||||||
@@ -10555,7 +10555,7 @@ void Rows_log_event::pack_info(Protocol *protocol)
|
|||||||
#ifdef MYSQL_CLIENT
|
#ifdef MYSQL_CLIENT
|
||||||
/**
|
/**
|
||||||
Print an event "body" cache to @c file possibly in two fragments.
|
Print an event "body" cache to @c file possibly in two fragments.
|
||||||
Each fragement is optionally per @c do_wrap to produce an SQL statement.
|
Each fragment is optionally per @c do_wrap to produce an SQL statement.
|
||||||
|
|
||||||
@param file a file to print to
|
@param file a file to print to
|
||||||
@param body the "body" IO_CACHE of event
|
@param body the "body" IO_CACHE of event
|
||||||
@@ -12177,7 +12177,7 @@ record_compare_exit:
|
|||||||
Find the best key to use when locating the row in @c find_row().
|
Find the best key to use when locating the row in @c find_row().
|
||||||
|
|
||||||
A primary key is preferred if it exists; otherwise a unique index is
|
A primary key is preferred if it exists; otherwise a unique index is
|
||||||
preferred. Else we pick the index with the smalles rec_per_key value.
|
preferred. Else we pick the index with the smallest rec_per_key value.
|
||||||
|
|
||||||
If a suitable key is found, set @c m_key, @c m_key_nr and @c m_key_info
|
If a suitable key is found, set @c m_key, @c m_key_nr and @c m_key_info
|
||||||
member fields appropriately.
|
member fields appropriately.
|
||||||
@@ -12310,7 +12310,7 @@ static int row_not_found_error(rpl_group_info *rgi)
|
|||||||
Locate the current row in event's table.
|
Locate the current row in event's table.
|
||||||
|
|
||||||
The current row is pointed by @c m_curr_row. Member @c m_width tells
|
The current row is pointed by @c m_curr_row. Member @c m_width tells
|
||||||
how many columns are there in the row (this can be differnet from
|
how many columns are there in the row (this can be different from
|
||||||
the number of columns in the table). It is assumed that event's
|
the number of columns in the table). It is assumed that event's
|
||||||
table is already open and pointed by @c m_table.
|
table is already open and pointed by @c m_table.
|
||||||
|
|
||||||
@@ -12351,7 +12351,7 @@ int Rows_log_event::find_row(rpl_group_info *rgi)
|
|||||||
rpl_row_tabledefs.test specifies that
|
rpl_row_tabledefs.test specifies that
|
||||||
if the extra field on the slave does not have a default value
|
if the extra field on the slave does not have a default value
|
||||||
and this is okay with Delete or Update events.
|
and this is okay with Delete or Update events.
|
||||||
Todo: fix wl3228 hld that requires defauls for all types of events
|
Todo: fix wl3228 hld that requires defaults for all types of events
|
||||||
*/
|
*/
|
||||||
|
|
||||||
prepare_record(table, m_width, FALSE);
|
prepare_record(table, m_width, FALSE);
|
||||||
@@ -12595,7 +12595,7 @@ int Rows_log_event::find_row(rpl_group_info *rgi)
|
|||||||
while (record_compare(table));
|
while (record_compare(table));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Note: above record_compare will take into accout all record fields
|
Note: above record_compare will take into account all record fields
|
||||||
which might be incorrect in case a partial row was given in the event
|
which might be incorrect in case a partial row was given in the event
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -452,7 +452,7 @@ class String;
|
|||||||
/**
|
/**
|
||||||
@def LOG_EVENT_ARTIFICIAL_F
|
@def LOG_EVENT_ARTIFICIAL_F
|
||||||
|
|
||||||
Artificial events are created arbitarily and not written to binary
|
Artificial events are created arbitrarily and not written to binary
|
||||||
log
|
log
|
||||||
|
|
||||||
These events should not update the master log position when slave
|
These events should not update the master log position when slave
|
||||||
@@ -854,13 +854,13 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
the struct aggregates two paramenters that identify an event
|
the struct aggregates two parameters that identify an event
|
||||||
uniquely in scope of communication of a particular master and slave couple.
|
uniquely in scope of communication of a particular master and slave couple.
|
||||||
I.e there can not be 2 events from the same staying connected master which
|
I.e there can not be 2 events from the same staying connected master which
|
||||||
have the same coordinates.
|
have the same coordinates.
|
||||||
@note
|
@note
|
||||||
Such identifier is not yet unique generally as the event originating master
|
Such identifier is not yet unique generally as the event originating master
|
||||||
is resetable. Also the crashed master can be replaced with some other.
|
is resettable. Also the crashed master can be replaced with some other.
|
||||||
*/
|
*/
|
||||||
typedef struct event_coordinates
|
typedef struct event_coordinates
|
||||||
{
|
{
|
||||||
@@ -2594,7 +2594,7 @@ public:
|
|||||||
uint8 number_of_event_types;
|
uint8 number_of_event_types;
|
||||||
/*
|
/*
|
||||||
The list of post-headers' lengths followed
|
The list of post-headers' lengths followed
|
||||||
by the checksum alg decription byte
|
by the checksum alg description byte
|
||||||
*/
|
*/
|
||||||
uint8 *post_header_len;
|
uint8 *post_header_len;
|
||||||
struct master_version_split {
|
struct master_version_split {
|
||||||
@@ -2934,7 +2934,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool is_deferred() { return deferred; }
|
bool is_deferred() { return deferred; }
|
||||||
/*
|
/*
|
||||||
In case of the deffered applying the variable instance is flagged
|
In case of the deferred applying the variable instance is flagged
|
||||||
and the parsing time query id is stored to be used at applying time.
|
and the parsing time query id is stored to be used at applying time.
|
||||||
*/
|
*/
|
||||||
void set_deferred(query_id_t qid) { deferred= true; query_id= qid; }
|
void set_deferred(query_id_t qid) { deferred= true; query_id= qid; }
|
||||||
@@ -3428,7 +3428,7 @@ public:
|
|||||||
bool write_data_header();
|
bool write_data_header();
|
||||||
bool write_data_body();
|
bool write_data_body();
|
||||||
/*
|
/*
|
||||||
Cut out Create_file extentions and
|
Cut out Create_file extensions and
|
||||||
write it as Load event - used on the slave
|
write it as Load event - used on the slave
|
||||||
*/
|
*/
|
||||||
bool write_base();
|
bool write_base();
|
||||||
@@ -4738,7 +4738,7 @@ protected:
|
|||||||
/**
|
/**
|
||||||
@class Incident_log_event
|
@class Incident_log_event
|
||||||
|
|
||||||
Class representing an incident, an occurance out of the ordinary,
|
Class representing an incident, an occurence out of the ordinary,
|
||||||
that happened on the master.
|
that happened on the master.
|
||||||
|
|
||||||
The event is used to inform the slave that something out of the
|
The event is used to inform the slave that something out of the
|
||||||
@@ -4782,7 +4782,7 @@ public:
|
|||||||
m_message.str= NULL; /* Just as a precaution */
|
m_message.str= NULL; /* Just as a precaution */
|
||||||
m_message.length= 0;
|
m_message.length= 0;
|
||||||
set_direct_logging();
|
set_direct_logging();
|
||||||
/* Replicate the incident irregardless of @@skip_replication. */
|
/* Replicate the incident regardless of @@skip_replication. */
|
||||||
flags&= ~LOG_EVENT_SKIP_REPLICATION_F;
|
flags&= ~LOG_EVENT_SKIP_REPLICATION_F;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
@@ -4803,7 +4803,7 @@ public:
|
|||||||
strmake(m_message.str, msg.str, msg.length);
|
strmake(m_message.str, msg.str, msg.length);
|
||||||
m_message.length= msg.length;
|
m_message.length= msg.length;
|
||||||
set_direct_logging();
|
set_direct_logging();
|
||||||
/* Replicate the incident irregardless of @@skip_replication. */
|
/* Replicate the incident regardless of @@skip_replication. */
|
||||||
flags&= ~LOG_EVENT_SKIP_REPLICATION_F;
|
flags&= ~LOG_EVENT_SKIP_REPLICATION_F;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@@ -846,7 +846,7 @@ int Write_rows_log_event_old::do_after_row_operations(TABLE *table, int error)
|
|||||||
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||||
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
||||||
/*
|
/*
|
||||||
reseting the extra with
|
resetting the extra with
|
||||||
table->file->extra(HA_EXTRA_NO_IGNORE_NO_KEY);
|
table->file->extra(HA_EXTRA_NO_IGNORE_NO_KEY);
|
||||||
fires bug#27077
|
fires bug#27077
|
||||||
todo: explain or fix
|
todo: explain or fix
|
||||||
@@ -1238,7 +1238,7 @@ Old_rows_log_event::Old_rows_log_event(const char *buf, uint event_len,
|
|||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if my_bitmap_init fails, catched in is_valid() */
|
/* if my_bitmap_init fails, caught in is_valid() */
|
||||||
if (likely(!my_bitmap_init(&m_cols,
|
if (likely(!my_bitmap_init(&m_cols,
|
||||||
m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL,
|
m_width <= sizeof(m_bitbuf)*8 ? m_bitbuf : NULL,
|
||||||
m_width,
|
m_width,
|
||||||
|
Reference in New Issue
Block a user