Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
MariaDB and MySQL Packaging Team
mariadb-5.5
Commits
95c6357a
Commit
95c6357a
authored
Jul 21, 2016
by
Otto Kekäläinen
Browse files
Imported Upstream version 5.5.50
parent
d97fe3f6
Changes
120
Hide whitespace changes
Inline
Side-by-side
mysys/my_write.c
View file @
95c6357a
/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
Copyright (c) 2011, 2016, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
mysys/testhash.c
View file @
95c6357a
...
...
@@ -169,7 +169,9 @@ static int do_test()
for
(
j
=
0
;
j
<
1000
;
j
++
)
if
(
key1
[
j
]
>
1
)
break
;
if
(
key1
[
j
]
>
1
)
// j will be 1000 only if we have no keys in the hash. This only happens
// when the parameter recant is set to 0 via command line argument.
if
(
j
<
1000
&&
key1
[
j
]
>
1
)
{
HASH_SEARCH_STATE
state
;
printf
(
"- Testing identical read
\n
"
);
...
...
mysys/tree.c
View file @
95c6357a
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
Copyright (c) 2010, 2016, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
regex/split.c
View file @
95c6357a
...
...
@@ -163,6 +163,10 @@ char *argv[];
}
else
if
(
argc
>
3
)
for
(
n
=
atoi
(
argv
[
3
]);
n
>
0
;
n
--
)
{
if
(
sizeof
(
buf
)
-
1
<
strlen
(
argv
[
1
]))
{
exit
(
EXIT_FAILURE
);
}
(
void
)
strcpy
(
buf
,
argv
[
1
]);
(
void
)
split
(
buf
,
fields
,
MNF
,
argv
[
2
]);
}
...
...
scripts/mysqld_multi.sh
View file @
95c6357a
...
...
@@ -17,7 +17,7 @@
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA
# Copyright (c) 2000, 201
0
, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2000, 201
6
, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
...
...
@@ -621,7 +621,11 @@ sub my_which
my
(
$command
)
=
@_
;
my
(
@paths,
$path
)
;
return
$command
if
(
-f
$command
&&
-x
$command
)
;
# If the argument is not 'my_print_defaults' then it would be of the format
# <absolute_path>/<program>
return
$command
if
(
$command
ne
'my_print_defaults'
&&
-f
$command
&&
-x
$command
)
;
@paths
=
split
(
':'
,
$ENV
{
'PATH'
})
;
foreach
$path
(
@paths
)
{
...
...
sql-common/client.c
View file @
95c6357a
...
...
@@ -1197,6 +1197,20 @@ static int add_init_command(struct st_mysql_options *options, const char *cmd)
my_free((OPTS)->extension->X); \
EXTENSION_SET(OPTS, X, my_strdup((STR), MYF(MY_WME)));
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
static
char
*
set_ssl_option_unpack_path
(
const
char
*
arg
)
{
char
*
opt_var
=
NULL
;
if
(
arg
)
{
char
buff
[
FN_REFLEN
+
1
];
unpack_filename
(
buff
,
(
char
*
)
arg
);
opt_var
=
my_strdup
(
buff
,
MYF
(
MY_WME
));
}
return
opt_var
;
}
#endif
/* HAVE_OPENSSL && !EMBEDDED_LIBRARY */
void
mysql_read_default_options
(
struct
st_mysql_options
*
options
,
const
char
*
filename
,
const
char
*
group
)
{
...
...
@@ -1796,10 +1810,10 @@ mysql_ssl_set(MYSQL *mysql __attribute__((unused)) ,
my_free
(
mysql
->
options
.
ssl_ca
);
my_free
(
mysql
->
options
.
ssl_capath
);
my_free
(
mysql
->
options
.
ssl_cipher
);
mysql
->
options
.
ssl_key
=
s
trdup_if_not_null
(
key
);
mysql
->
options
.
ssl_cert
=
s
trdup_if_not_null
(
cert
);
mysql
->
options
.
ssl_ca
=
s
trdup_if_not_null
(
ca
);
mysql
->
options
.
ssl_capath
=
s
trdup_if_not_null
(
capath
);
mysql
->
options
.
ssl_key
=
s
et_ssl_option_unpack_path
(
key
);
mysql
->
options
.
ssl_cert
=
s
et_ssl_option_unpack_path
(
cert
);
mysql
->
options
.
ssl_ca
=
s
et_ssl_option_unpack_path
(
ca
);
mysql
->
options
.
ssl_capath
=
s
et_ssl_option_unpack_path
(
capath
);
mysql
->
options
.
ssl_cipher
=
strdup_if_not_null
(
cipher
);
mysql
->
options
.
use_ssl
=
TRUE
;
#endif
/* HAVE_OPENSSL && !EMBEDDED_LIBRARY */
...
...
sql/field.cc
View file @
95c6357a
...
...
@@ -1701,6 +1701,7 @@ Field_str::Field_str(uchar *ptr_arg,uint32 len_arg, uchar *null_ptr_arg,
if
(
charset_arg
->
state
&
MY_CS_BINSORT
)
flags
|=
BINARY_FLAG
;
field_derivation
=
DERIVATION_IMPLICIT
;
field_repertoire
=
my_charset_repertoire
(
charset_arg
);
}
...
...
sql/field.h
View file @
95c6357a
...
...
@@ -580,11 +580,12 @@ class Field
{
return
binary
()
?
&
my_charset_bin
:
charset
();
}
virtual
CHARSET_INFO
*
sort_charset
(
void
)
const
{
return
charset
();
}
virtual
bool
has_charset
(
void
)
const
{
return
FALSE
;
}
virtual
void
set_charset
(
CHARSET_INFO
*
charset_arg
)
{
}
virtual
enum
Derivation
derivation
(
void
)
const
{
return
DERIVATION_IMPLICIT
;
}
virtual
uint
repertoire
(
void
)
const
{
return
MY_REPERTOIRE_UNICODE30
;
}
virtual
void
set_derivation
(
enum
Derivation
derivation_arg
)
{
}
virtual
void
set_derivation
(
enum
Derivation
derivation_arg
,
uint
repertoire_arg
)
{
}
virtual
int
set_time
()
{
return
1
;
}
void
set_warning
(
MYSQL_ERROR
::
enum_warning_level
,
unsigned
int
code
,
int
cuted_increment
);
...
...
@@ -775,8 +776,10 @@ class Field_num :public Field {
class
Field_str
:
public
Field
{
protected:
// TODO-10.2: Reuse DTCollation instead of these three members
CHARSET_INFO
*
field_charset
;
enum
Derivation
field_derivation
;
uint
field_repertoire
;
public:
Field_str
(
uchar
*
ptr_arg
,
uint32
len_arg
,
uchar
*
null_ptr_arg
,
uchar
null_bit_arg
,
utype
unireg_check_arg
,
...
...
@@ -799,15 +802,15 @@ class Field_str :public Field {
int
store_decimal
(
const
my_decimal
*
);
int
store
(
const
char
*
to
,
uint
length
,
CHARSET_INFO
*
cs
)
=
0
;
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
uint
repertoire
(
void
)
const
{
return
my_charset_repertoire
(
field_charset
);
}
uint
repertoire
(
void
)
const
{
return
field_repertoire
;
}
CHARSET_INFO
*
charset
(
void
)
const
{
return
field_charset
;
}
void
set_charset
(
CHARSET_INFO
*
charset_arg
)
{
field_charset
=
charset_arg
;
}
enum
Derivation
derivation
(
void
)
const
{
return
field_derivation
;
}
virtual
void
set_derivation
(
enum
Derivation
derivation_arg
)
{
field_derivation
=
derivation_arg
;
}
void
set_derivation
(
enum
Derivation
derivation_arg
,
uint
repertoire_arg
)
{
field_derivation
=
derivation_arg
;
field_repertoire
=
repertoire_arg
;
}
bool
binary
()
const
{
return
field_charset
==
&
my_charset_bin
;
}
uint32
max_display_length
()
{
return
field_length
;
}
friend
class
Create_field
;
...
...
@@ -1851,10 +1854,9 @@ class Field_blob :public Field_longstr {
packlength
=
4
;
if
(
set_packlength
)
{
uint32
l_char_length
=
len_arg
/
cs
->
mbmaxlen
;
packlength
=
l_char_length
<=
255
?
1
:
l_char_length
<=
65535
?
2
:
l_char_length
<=
16777215
?
3
:
4
;
packlength
=
len_arg
<=
255
?
1
:
len_arg
<=
65535
?
2
:
len_arg
<=
16777215
?
3
:
4
;
}
}
Field_blob
(
uint32
packlength_arg
)
...
...
sql/gen_lex_hash.cc
View file @
95c6357a
...
...
@@ -310,6 +310,7 @@ void print_find_structs()
add_structs_to_map
(
root_by_len
,
max_len
);
set_links
(
root_by_len
,
max_len
);
print_hash_map
(
"sql_functions_map"
);
free
(
hash_map
);
hash_map
=
0
;
size_hash_map
=
0
;
...
...
@@ -319,6 +320,7 @@ void print_find_structs()
add_structs_to_map
(
root_by_len2
,
max_len2
);
set_links
(
root_by_len2
,
max_len2
);
print_hash_map
(
"symbols_map"
);
free
(
hash_map
);
}
...
...
sql/item.cc
View file @
95c6357a
...
...
@@ -244,9 +244,6 @@ bool Item::val_bool()
*/
String
*
Item
::
val_str_ascii
(
String
*
str
)
{
if
(
!
(
collation
.
collation
->
state
&
MY_CS_NONASCII
))
return
val_str
(
str
);
DBUG_ASSERT
(
str
!=
&
str_value
);
uint
errors
;
...
...
@@ -254,11 +251,15 @@ String *Item::val_str_ascii(String *str)
if
(
!
res
)
return
0
;
if
((
null_value
=
str
->
copy
(
res
->
ptr
(),
res
->
length
(),
collation
.
collation
,
&
my_charset_latin1
,
&
errors
)))
return
0
;
if
(
!
(
res
->
charset
()
->
state
&
MY_CS_NONASCII
))
str
=
res
;
else
{
if
((
null_value
=
str
->
copy
(
res
->
ptr
(),
res
->
length
(),
collation
.
collation
,
&
my_charset_latin1
,
&
errors
)))
return
0
;
}
return
str
;
}
...
...
sql/item_cmpfunc.cc
View file @
95c6357a
...
...
@@ -160,10 +160,11 @@ static int cmp_row_type(Item* item1, Item* item2)
static
int
agg_cmp_type
(
Item_result
*
type
,
Item
**
items
,
uint
nitems
)
{
uint
i
;
uint
unsigned_count
=
items
[
0
]
->
unsigned_flag
;
type
[
0
]
=
items
[
0
]
->
cmp_type
();
for
(
i
=
1
;
i
<
nitems
;
i
++
)
for
(
uint
i
=
1
;
i
<
nitems
;
i
++
)
{
unsigned_count
+=
items
[
i
]
->
unsigned_flag
;
type
[
0
]
=
item_cmp_type
(
type
[
0
],
items
[
i
]
->
cmp_type
());
/*
When aggregating types of two row expressions we have to check
...
...
@@ -175,6 +176,12 @@ static int agg_cmp_type(Item_result *type, Item **items, uint nitems)
if
(
type
[
0
]
==
ROW_RESULT
&&
cmp_row_type
(
items
[
0
],
items
[
i
]))
return
1
;
// error found: invalid usage of rows
}
/**
If all arguments are of INT type but have different unsigned_flag values,
switch to DECIMAL_RESULT.
*/
if
(
type
[
0
]
==
INT_RESULT
&&
unsigned_count
!=
nitems
&&
unsigned_count
!=
0
)
type
[
0
]
=
DECIMAL_RESULT
;
return
0
;
}
...
...
sql/item_func.cc
View file @
95c6357a
...
...
@@ -2939,12 +2939,13 @@ bool Item_func_min_max::get_date(MYSQL_TIME *ltime, ulonglong fuzzy_date)
}
unpack_time
(
min_max
,
ltime
);
if
(
compare_as_dates
->
field_type
()
==
MYSQL_TYPE_DATE
)
enum_field_types
ftype
=
compare_as_dates
->
field_type
();
if
(
ftype
==
MYSQL_TYPE_DATE
||
ftype
==
MYSQL_TYPE_NEWDATE
)
{
ltime
->
time_type
=
MYSQL_TIMESTAMP_DATE
;
ltime
->
hour
=
ltime
->
minute
=
ltime
->
second
=
ltime
->
second_part
=
0
;
}
else
if
(
compare_as_dates
->
field_
type
()
==
MYSQL_TYPE_TIME
)
else
if
(
f
type
==
MYSQL_TYPE_TIME
)
{
ltime
->
time_type
=
MYSQL_TIMESTAMP_TIME
;
ltime
->
hour
+=
(
ltime
->
month
*
32
+
ltime
->
day
)
*
24
;
...
...
@@ -6366,6 +6367,8 @@ bool Item_func_match::fix_index()
for
(
i
=
1
;
i
<
arg_count
;
i
++
)
{
if
(
args
[
i
]
->
type
()
!=
FIELD_ITEM
)
goto
err
;
item
=
(
Item_field
*
)
args
[
i
];
for
(
keynr
=
0
;
keynr
<
fts
;
keynr
++
)
{
...
...
sql/item_geofunc.cc
View file @
95c6357a
/*
Copyright (c) 2003-2007 MySQL AB, 2009, 2010 Sun Microsystems, Inc.
Use is subject to license terms.
/* Copyright (c) 2003, 2016, Oracle and/or its affiliates.
Copyright (c) 2011, 2016, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
sql/item_timefunc.cc
View file @
95c6357a
...
...
@@ -935,9 +935,8 @@ void Item_func_monthname::fix_length_and_dec()
{
THD
*
thd
=
current_thd
;
CHARSET_INFO
*
cs
=
thd
->
variables
.
collation_connection
;
uint32
repertoire
=
my_charset_repertoire
(
cs
);
locale
=
thd
->
variables
.
lc_time_names
;
collation
.
set
(
cs
,
DERIVATION_COERCIBLE
,
repertoire
);
collation
.
set
(
cs
,
DERIVATION_COERCIBLE
,
locale
->
repertoire
()
);
decimals
=
0
;
max_length
=
locale
->
max_month_name_length
*
collation
.
collation
->
mbmaxlen
;
maybe_null
=
1
;
...
...
@@ -1082,9 +1081,8 @@ void Item_func_dayname::fix_length_and_dec()
{
THD
*
thd
=
current_thd
;
CHARSET_INFO
*
cs
=
thd
->
variables
.
collation_connection
;
uint32
repertoire
=
my_charset_repertoire
(
cs
);
locale
=
thd
->
variables
.
lc_time_names
;
collation
.
set
(
cs
,
DERIVATION_COERCIBLE
,
repertoire
);
collation
.
set
(
cs
,
DERIVATION_COERCIBLE
,
locale
->
repertoire
()
);
decimals
=
0
;
max_length
=
locale
->
max_day_name_length
*
collation
.
collation
->
mbmaxlen
;
maybe_null
=
1
;
...
...
sql/lex.h
View file @
95c6357a
...
...
@@ -46,12 +46,9 @@ SYM_GROUP sym_group_rtree= {"RTree keys", "HAVE_RTREE_KEYS"};
static
SYMBOL
symbols
[]
=
{
{
"&&"
,
SYM
(
AND_AND_SYM
)},
{
"<"
,
SYM
(
LT
)},
{
"<="
,
SYM
(
LE
)},
{
"<>"
,
SYM
(
NE
)},
{
"!="
,
SYM
(
NE
)},
{
"="
,
SYM
(
EQ
)},
{
">"
,
SYM
(
GT_SYM
)},
{
">="
,
SYM
(
GE
)},
{
"<<"
,
SYM
(
SHIFT_LEFT
)},
{
">>"
,
SYM
(
SHIFT_RIGHT
)},
...
...
sql/log.cc
View file @
95c6357a
/* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates.
/* Copyright (c) 2000, 201
6
, Oracle and/or its affiliates.
Copyright (c) 2009, 2016, MariaDB
This program is free software; you can redistribute it and/or modify
...
...
sql/log.h
View file @
95c6357a
/* Copyright (c) 2005, 201
2
, Oracle and/or its affiliates.
Copyright (c) 2009, 201
2
, Monty Program Ab
/* Copyright (c) 2005, 201
6
, Oracle and/or its affiliates.
Copyright (c) 2009, 201
6
, Monty Program Ab
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
sql/log_event.cc
View file @
95c6357a
/*
Copyright (c) 2000, 201
5
, Oracle and/or its affiliates.
Copyright (c) 2000, 201
6
, Oracle and/or its affiliates.
Copyright (c) 2009, 2016, MariaDB
This program is free software; you can redistribute it and/or modify
...
...
@@ -8424,9 +8424,6 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
/*
When the open and locking succeeded, we check all tables to
ensure that they still have the correct type.
We can use a down cast here since we know that every table added
to the tables_to_lock is a RPL_TABLE_LIST.
*/
{
...
...
@@ -8445,10 +8442,37 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
NOTE: The base tables are added here are removed when
close_thread_tables is called.
*/
RPL_
TABLE_LIST
*
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
ptr
=
s
ta
tic_cast
<
RPL_TABLE_LIST
*>
(
ptr
->
next_global
)
,
i
++
)
TABLE_LIST
*
table_list_
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
table_list_
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
table_list_
ptr
=
ta
ble_list_
ptr
->
next_global
,
i
++
)
{
/*
Below if condition takes care of skipping base tables that
make up the MERGE table (which are added by open_tables()
call). They are added next to the merge table in the list.
For eg: If RPL_TABLE_LIST is t3->t1->t2 (where t1 and t2
are base tables for merge table 't3'), open_tables will modify
the list by adding t1 and t2 again immediately after t3 in the
list (*not at the end of the list*). New table_to_lock list will
look like t3->t1'->t2'->t1->t2 (where t1' and t2' are TABLE_LIST
objects added by open_tables() call). There is no flag(or logic) in
open_tables() that can skip adding these base tables to the list.
So the logic here should take care of skipping them.
tables_to_lock_count logic will take care of skipping base tables
that are added at the end of the list.
For eg: If RPL_TABLE_LIST is t1->t2->t3, open_tables will modify
the list into t1->t2->t3->t1'->t2'. t1' and t2' will be skipped
because tables_to_lock_count logic in this for loop.
*/
if
(
table_list_ptr
->
parent_l
)
continue
;
/*
We can use a down cast here since we know that every table added
to the tables_to_lock is a RPL_TABLE_LIST (or child table which is
skipped above).
*/
RPL_TABLE_LIST
*
ptr
=
static_cast
<
RPL_TABLE_LIST
*>
(
table_list_ptr
);
DBUG_ASSERT
(
ptr
->
m_tabledef_valid
);
TABLE
*
conv_table
;
if
(
!
ptr
->
m_tabledef
.
compatible_with
(
thd
,
const_cast
<
Relay_log_info
*>
(
rli
),
...
...
@@ -8489,7 +8513,15 @@ int Rows_log_event::do_apply_event(Relay_log_info const *rli)
*/
TABLE_LIST
*
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
ptr
=
ptr
->
next_global
,
i
++
)
{
/*
Please see comment in above 'for' loop to know the reason
for this if condition
*/
if
(
ptr
->
parent_l
)
continue
;
const_cast
<
Relay_log_info
*>
(
rli
)
->
m_table_map
.
set_table
(
ptr
->
table_id
,
ptr
->
table
);
}
#ifdef HAVE_QUERY_CACHE
query_cache
.
invalidate_locked_for_write
(
thd
,
rli
->
tables_to_lock
);
...
...
sql/log_event_old.cc
View file @
95c6357a
/* Copyright (c) 2007, 201
3
, Oracle and/or its affiliates.
/* Copyright (c) 2007, 201
6
, Oracle and/or its affiliates.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -119,16 +119,25 @@ Old_rows_log_event::do_apply_event(Old_rows_log_event *ev, const Relay_log_info
/*
When the open and locking succeeded, we check all tables to
ensure that they still have the correct type.
We can use a down cast here since we know that every table added
to the tables_to_lock is a RPL_TABLE_LIST.
*/
{
RPL_
TABLE_LIST
*
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
ptr
=
s
ta
tic_cast
<
RPL_TABLE_LIST
*>
(
ptr
->
next_global
)
,
i
++
)
TABLE_LIST
*
table_list_
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
table_list_
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
table_list_
ptr
=
ta
ble_list_
ptr
->
next_global
,
i
++
)
{
/*
Please see comment in log_event.cc-Rows_log_event::do_apply_event()
function for the explanation of the below if condition
*/
if
(
table_list_ptr
->
parent_l
)
continue
;
/*
We can use a down cast here since we know that every table added
to the tables_to_lock is a RPL_TABLE_LIST(or child table which is
skipped above).
*/
RPL_TABLE_LIST
*
ptr
=
static_cast
<
RPL_TABLE_LIST
*>
(
table_list_ptr
);
DBUG_ASSERT
(
ptr
->
m_tabledef_valid
);
TABLE
*
conv_table
;
if
(
!
ptr
->
m_tabledef
.
compatible_with
(
thd
,
const_cast
<
Relay_log_info
*>
(
rli
),
...
...
@@ -162,7 +171,15 @@ Old_rows_log_event::do_apply_event(Old_rows_log_event *ev, const Relay_log_info
*/
TABLE_LIST
*
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
ptr
=
ptr
->
next_global
,
i
++
)
{
/*
Please see comment in log_event.cc-Rows_log_event::do_apply_event()
function for the explanation of the below if condition
*/
if
(
ptr
->
parent_l
)
continue
;
const_cast
<
Relay_log_info
*>
(
rli
)
->
m_table_map
.
set_table
(
ptr
->
table_id
,
ptr
->
table
);
}
#ifdef HAVE_QUERY_CACHE
query_cache
.
invalidate_locked_for_write
(
thd
,
rli
->
tables_to_lock
);
#endif
...
...
@@ -1545,16 +1562,25 @@ int Old_rows_log_event::do_apply_event(Relay_log_info const *rli)
/*
When the open and locking succeeded, we check all tables to
ensure that they still have the correct type.
We can use a down cast here since we know that every table added
to the tables_to_lock is a RPL_TABLE_LIST.
*/
{
RPL_
TABLE_LIST
*
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
ptr
=
static_cast
<
RPL_TABLE_LIST
*>
(
ptr
->
next_global
),
i
++
)
TABLE_LIST
*
table_list_
ptr
=
rli
->
tables_to_lock
;
for
(
uint
i
=
0
;
table_list_
ptr
&&
(
i
<
rli
->
tables_to_lock_count
);
table_list_
ptr
=
static_cast
<
RPL_TABLE_LIST
*>
(
table_list_
ptr
->
next_global
),
i
++
)
{
/*
Please see comment in log_event.cc-Rows_log_event::do_apply_event()
function for the explanation of the below if condition
*/
if
(
table_list_ptr
->
parent_l
)
continue
;
/*
We can use a down cast here since we know that every table added
to the tables_to_lock is a RPL_TABLE_LIST (or child table which is
skipped above).
*/
RPL_TABLE_LIST
*
ptr
=
static_cast
<
RPL_TABLE_LIST
*>
(
table_list_ptr
);
TABLE
*
conv_table
;
if
(
ptr
->
m_tabledef
.
compatible_with
(
thd
,
const_cast
<
Relay_log_info
*>
(
rli
),
ptr
->
table
,
&
conv_table
))
...
...
sql/slave.cc
View file @
95c6357a
/* Copyright (c) 2000, 201
5
, Oracle and/or its affiliates.
Copyright (c) 200
8
, 201
5
,
SkySQL Ab.
/* Copyright (c) 2000, 201
6
, Oracle and/or its affiliates.
Copyright (c) 200
9
, 201
6
,
MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
Prev
1
2
3
4
5
6
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment