Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
7271a601
Commit
7271a601
authored
Feb 22, 2005
by
lars@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge 4.1->5.0
parents
dcea8122
c583eb69
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
100 additions
and
40 deletions
+100
-40
client/mysqldump.c
client/mysqldump.c
+4
-1
mysql-test/r/mysqldump.result
mysql-test/r/mysqldump.result
+36
-0
mysql-test/r/rpl_charset.result
mysql-test/r/rpl_charset.result
+7
-0
mysql-test/t/rpl_charset.test
mysql-test/t/rpl_charset.test
+16
-4
sql/log_event.cc
sql/log_event.cc
+12
-4
sql/mysql_priv.h
sql/mysql_priv.h
+4
-0
sql/mysqld.cc
sql/mysqld.cc
+2
-1
sql/set_var.cc
sql/set_var.cc
+6
-0
sql/sql_error.cc
sql/sql_error.cc
+13
-30
No files found.
client/mysqldump.c
View file @
7271a601
...
@@ -493,7 +493,8 @@ static void write_header(FILE *sql_file, char *db_name)
...
@@ -493,7 +493,8 @@ static void write_header(FILE *sql_file, char *db_name)
"
);
"
);
}
}
fprintf
(
sql_file
,
fprintf
(
sql_file
,
"/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='%s%s%s' */;
\n
"
,
"/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='%s%s%s' */;
\n
"
"/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
\n
"
,
path
?
""
:
"NO_AUTO_VALUE_ON_ZERO"
,
compatible_mode_normal_str
[
0
]
==
0
?
""
:
","
,
path
?
""
:
"NO_AUTO_VALUE_ON_ZERO"
,
compatible_mode_normal_str
[
0
]
==
0
?
""
:
","
,
compatible_mode_normal_str
);
compatible_mode_normal_str
);
check_io
(
sql_file
);
check_io
(
sql_file
);
...
@@ -522,6 +523,8 @@ static void write_footer(FILE *sql_file)
...
@@ -522,6 +523,8 @@ static void write_footer(FILE *sql_file)
"/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
\n
"
"/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
\n
"
"/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
\n
"
"/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
\n
"
"/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
\n
"
);
"/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
\n
"
);
fprintf
(
sql_file
,
"/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
\n
"
);
fputs
(
"
\n
"
,
sql_file
);
fputs
(
"
\n
"
,
sql_file
);
check_io
(
sql_file
);
check_io
(
sql_file
);
}
}
...
...
mysql-test/r/mysqldump.result
View file @
7271a601
This diff is collapsed.
Click to expand it.
mysql-test/r/rpl_charset.result
View file @
7271a601
...
@@ -246,3 +246,10 @@ SET TIMESTAMP=1000000000;
...
@@ -246,3 +246,10 @@ SET TIMESTAMP=1000000000;
SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30;
SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30;
INSERT INTO t1 (c1, c2) VALUES (', ',', ');
INSERT INTO t1 (c1, c2) VALUES (', ',', ');
drop table t1;
drop table t1;
create table `t1` (
`pk` varchar(10) not null default '',
primary key (`pk`)
) engine=myisam default charset=latin1;
set @p=_latin1 'test';
update t1 set pk='test' where pk=@p;
drop table t1;
mysql-test/t/rpl_charset.test
View file @
7271a601
...
@@ -63,10 +63,10 @@ connection master;
...
@@ -63,10 +63,10 @@ connection master;
set
character_set_client
=
latin1
,
collation_connection
=
latin1_german1_ci
;
set
character_set_client
=
latin1
,
collation_connection
=
latin1_german1_ci
;
truncate
table
t1
;
truncate
table
t1
;
insert
into
t1
(
b
)
values
(
@@
collation_connection
);
insert
into
t1
(
b
)
values
(
@@
collation_connection
);
insert
into
t1
(
b
)
values
(
LEAST
(
"M
l
ler"
,
"Muffler"
));
insert
into
t1
(
b
)
values
(
LEAST
(
"M
ül
ler"
,
"Muffler"
));
set
collation_connection
=
latin1_german2_ci
;
set
collation_connection
=
latin1_german2_ci
;
insert
into
t1
(
b
)
values
(
@@
collation_connection
);
insert
into
t1
(
b
)
values
(
@@
collation_connection
);
insert
into
t1
(
b
)
values
(
LEAST
(
"M
l
ler"
,
"Muffler"
));
insert
into
t1
(
b
)
values
(
LEAST
(
"M
ül
ler"
,
"Muffler"
));
--
disable_query_log
--
disable_query_log
select
"--- --master--"
as
""
;
select
"--- --master--"
as
""
;
--
enable_query_log
--
enable_query_log
...
@@ -90,7 +90,7 @@ select * from mysqltest2.t1 order by a;
...
@@ -90,7 +90,7 @@ select * from mysqltest2.t1 order by a;
# which provokes error messages (like 'Illegal mix of collation') when
# which provokes error messages (like 'Illegal mix of collation') when
# we replay the master's INSERT/etc statements.
# we replay the master's INSERT/etc statements.
connection
master
;
connection
master
;
set
@
a
=
_cp850
'M
l
ler'
collate
cp850_general_ci
;
set
@
a
=
_cp850
'M
ül
ler'
collate
cp850_general_ci
;
truncate
table
t1
;
truncate
table
t1
;
insert
into
t1
(
b
)
values
(
collation
(
@
a
));
insert
into
t1
(
b
)
values
(
collation
(
@
a
));
--
disable_query_log
--
disable_query_log
...
@@ -145,7 +145,7 @@ CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
...
@@ -145,7 +145,7 @@ CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
SET
CHARACTER_SET_CLIENT
=
koi8r
,
SET
CHARACTER_SET_CLIENT
=
koi8r
,
CHARACTER_SET_CONNECTION
=
cp1251
,
CHARACTER_SET_CONNECTION
=
cp1251
,
CHARACTER_SET_RESULTS
=
koi8r
;
CHARACTER_SET_RESULTS
=
koi8r
;
INSERT
INTO
t1
(
c1
,
c2
)
VALUES
(
'
, '
,
', '
);
INSERT
INTO
t1
(
c1
,
c2
)
VALUES
(
'
îÕ, ÚÁ ÒÙÂÁÌËÕ'
,
'îÕ, ÚÁ ÒÙÂÁÌËÕ'
);
select
hex
(
c1
),
hex
(
c2
)
from
t1
;
select
hex
(
c1
),
hex
(
c2
)
from
t1
;
sync_slave_with_master
;
sync_slave_with_master
;
select
hex
(
c1
),
hex
(
c2
)
from
t1
;
select
hex
(
c1
),
hex
(
c2
)
from
t1
;
...
@@ -157,3 +157,15 @@ connection master;
...
@@ -157,3 +157,15 @@ connection master;
drop
table
t1
;
drop
table
t1
;
sync_slave_with_master
;
sync_slave_with_master
;
#
# BUG#6676: Derivation of variables must be correct on slave
#
connection
master
;
create
table
`t1`
(
`pk`
varchar
(
10
)
not
null
default
''
,
primary
key
(
`pk`
)
)
engine
=
myisam
default
charset
=
latin1
;
set
@
p
=
_latin1
'test'
;
update
t1
set
pk
=
'test'
where
pk
=@
p
;
drop
table
t1
;
sync_slave_with_master
;
sql/log_event.cc
View file @
7271a601
...
@@ -1450,7 +1450,6 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
...
@@ -1450,7 +1450,6 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli)
thd
->
query_id
=
next_query_id
();
thd
->
query_id
=
next_query_id
();
VOID
(
pthread_mutex_unlock
(
&
LOCK_thread_count
));
VOID
(
pthread_mutex_unlock
(
&
LOCK_thread_count
));
thd
->
variables
.
pseudo_thread_id
=
thread_id
;
// for temp tables
thd
->
variables
.
pseudo_thread_id
=
thread_id
;
// for temp tables
mysql_log
.
write
(
thd
,
COM_QUERY
,
"%s"
,
thd
->
query
);
DBUG_PRINT
(
"query"
,(
"%s"
,
thd
->
query
));
DBUG_PRINT
(
"query"
,(
"%s"
,
thd
->
query
));
if
(
ignored_error_code
((
expected_error
=
error_code
))
||
if
(
ignored_error_code
((
expected_error
=
error_code
))
||
...
@@ -1535,9 +1534,13 @@ START SLAVE; . Query: '%s'", expected_error, thd->query);
...
@@ -1535,9 +1534,13 @@ START SLAVE; . Query: '%s'", expected_error, thd->query);
goto
end
;
goto
end
;
}
}
/* If the query was not ignored, it is printed to the general log */
if
(
thd
->
net
.
last_errno
!=
ER_SLAVE_IGNORED_TABLE
)
mysql_log
.
write
(
thd
,
COM_QUERY
,
"%s"
,
thd
->
query
);
compare_errors:
compare_errors:
/*
/*
If we expected a non-zero error code, and we don't get the same error
If we expected a non-zero error code, and we don't get the same error
code, and none of them should be ignored.
code, and none of them should be ignored.
*/
*/
...
@@ -3470,7 +3473,12 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli)
...
@@ -3470,7 +3473,12 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli)
0 can be passed as last argument (reference on item)
0 can be passed as last argument (reference on item)
*/
*/
e
.
fix_fields
(
thd
,
0
,
0
);
e
.
fix_fields
(
thd
,
0
,
0
);
e
.
update_hash
(
val
,
val_len
,
type
,
charset
,
DERIVATION_NONE
);
/*
A variable can just be considered as a table with
a single record and with a single column. Thus, like
a column value, it could always have IMPLICIT derivation.
*/
e
.
update_hash
(
val
,
val_len
,
type
,
charset
,
DERIVATION_IMPLICIT
);
free_root
(
thd
->
mem_root
,
0
);
free_root
(
thd
->
mem_root
,
0
);
rli
->
inc_event_relay_log_pos
();
rli
->
inc_event_relay_log_pos
();
...
...
sql/mysql_priv.h
View file @
7271a601
...
@@ -254,6 +254,10 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
...
@@ -254,6 +254,10 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
/* The rest of the file is included in the server only */
/* The rest of the file is included in the server only */
#ifndef MYSQL_CLIENT
#ifndef MYSQL_CLIENT
/* If set to 0, then the thread will ignore all warnings with level notes.
Set by executing SET SQL_NOTES=1 */
#define OPTION_SQL_NOTES (1L << 31)
/* Bits for different SQL modes modes (including ANSI mode) */
/* Bits for different SQL modes modes (including ANSI mode) */
#define MODE_REAL_AS_FLOAT 1
#define MODE_REAL_AS_FLOAT 1
#define MODE_PIPES_AS_CONCAT 2
#define MODE_PIPES_AS_CONCAT 2
...
...
sql/mysqld.cc
View file @
7271a601
...
@@ -5782,7 +5782,8 @@ static void mysql_init_variables(void)
...
@@ -5782,7 +5782,8 @@ static void mysql_init_variables(void)
language_ptr
=
language
;
language_ptr
=
language
;
mysql_data_home
=
mysql_real_data_home
;
mysql_data_home
=
mysql_real_data_home
;
thd_startup_options
=
(
OPTION_UPDATE_LOG
|
OPTION_AUTO_IS_NULL
|
thd_startup_options
=
(
OPTION_UPDATE_LOG
|
OPTION_AUTO_IS_NULL
|
OPTION_BIN_LOG
|
OPTION_QUOTE_SHOW_CREATE
);
OPTION_BIN_LOG
|
OPTION_QUOTE_SHOW_CREATE
|
OPTION_SQL_NOTES
);
protocol_version
=
PROTOCOL_VERSION
;
protocol_version
=
PROTOCOL_VERSION
;
what_to_log
=
~
(
1L
<<
(
uint
)
COM_TIME
);
what_to_log
=
~
(
1L
<<
(
uint
)
COM_TIME
);
refresh_version
=
flush_version
=
1L
;
/* Increments on each reload */
refresh_version
=
flush_version
=
1L
;
/* Increments on each reload */
...
...
sql/set_var.cc
View file @
7271a601
...
@@ -459,6 +459,9 @@ static sys_var_thd_bit sys_log_binlog("sql_log_bin",
...
@@ -459,6 +459,9 @@ static sys_var_thd_bit sys_log_binlog("sql_log_bin",
static
sys_var_thd_bit
sys_sql_warnings
(
"sql_warnings"
,
0
,
static
sys_var_thd_bit
sys_sql_warnings
(
"sql_warnings"
,
0
,
set_option_bit
,
set_option_bit
,
OPTION_WARNINGS
);
OPTION_WARNINGS
);
static
sys_var_thd_bit
sys_sql_notes
(
"sql_notes"
,
0
,
set_option_bit
,
OPTION_SQL_NOTES
);
static
sys_var_thd_bit
sys_auto_is_null
(
"sql_auto_is_null"
,
0
,
static
sys_var_thd_bit
sys_auto_is_null
(
"sql_auto_is_null"
,
0
,
set_option_bit
,
set_option_bit
,
OPTION_AUTO_IS_NULL
);
OPTION_AUTO_IS_NULL
);
...
@@ -653,6 +656,7 @@ sys_var *sys_variables[]=
...
@@ -653,6 +656,7 @@ sys_var *sys_variables[]=
&
sys_sql_max_join_size
,
&
sys_sql_max_join_size
,
&
sys_sql_mode
,
&
sys_sql_mode
,
&
sys_sql_warnings
,
&
sys_sql_warnings
,
&
sys_sql_notes
,
&
sys_storage_engine
,
&
sys_storage_engine
,
#ifdef HAVE_REPLICATION
#ifdef HAVE_REPLICATION
&
sys_sync_binlog_period
,
&
sys_sync_binlog_period
,
...
@@ -927,6 +931,8 @@ struct show_var_st init_vars[]= {
...
@@ -927,6 +931,8 @@ struct show_var_st init_vars[]= {
{
sys_sort_buffer
.
name
,
(
char
*
)
&
sys_sort_buffer
,
SHOW_SYS
},
{
sys_sort_buffer
.
name
,
(
char
*
)
&
sys_sort_buffer
,
SHOW_SYS
},
{
sys_sql_mode
.
name
,
(
char
*
)
&
sys_sql_mode
,
SHOW_SYS
},
{
sys_sql_mode
.
name
,
(
char
*
)
&
sys_sql_mode
,
SHOW_SYS
},
{
sys_storage_engine
.
name
,
(
char
*
)
&
sys_storage_engine
,
SHOW_SYS
},
{
sys_storage_engine
.
name
,
(
char
*
)
&
sys_storage_engine
,
SHOW_SYS
},
{
"sql_notes"
,
(
char
*
)
&
sys_sql_notes
,
SHOW_BOOL
},
{
"sql_warnings"
,
(
char
*
)
&
sys_sql_warnings
,
SHOW_BOOL
},
#ifdef HAVE_REPLICATION
#ifdef HAVE_REPLICATION
{
sys_sync_binlog_period
.
name
,(
char
*
)
&
sys_sync_binlog_period
,
SHOW_SYS
},
{
sys_sync_binlog_period
.
name
,(
char
*
)
&
sys_sync_binlog_period
,
SHOW_SYS
},
{
sys_sync_replication
.
name
,
(
char
*
)
&
sys_sync_replication
,
SHOW_SYS
},
{
sys_sync_replication
.
name
,
(
char
*
)
&
sys_sync_replication
,
SHOW_SYS
},
...
...
sql/sql_error.cc
View file @
7271a601
...
@@ -43,7 +43,6 @@ This file contains the implementation of error and warnings related
...
@@ -43,7 +43,6 @@ This file contains the implementation of error and warnings related
***********************************************************************/
***********************************************************************/
#include "mysql_priv.h"
#include "mysql_priv.h"
#include "sp_rcontext.h"
/*
/*
Store a new message in an error object
Store a new message in an error object
...
@@ -106,27 +105,11 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
...
@@ -106,27 +105,11 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
MYSQL_ERROR
*
err
=
0
;
MYSQL_ERROR
*
err
=
0
;
DBUG_ENTER
(
"push_warning"
);
DBUG_ENTER
(
"push_warning"
);
if
(
level
==
MYSQL_ERROR
::
WARN_LEVEL_NOTE
&&
!
(
thd
->
options
&
OPTION_SQL_NOTES
))
return
(
0
);
if
(
thd
->
query_id
!=
thd
->
warn_id
)
if
(
thd
->
query_id
!=
thd
->
warn_id
)
mysql_reset_errors
(
thd
);
mysql_reset_errors
(
thd
);
thd
->
got_warning
=
1
;
if
(
thd
->
spcont
&&
thd
->
spcont
->
find_handler
(
code
,
((
int
)
level
>=
(
int
)
MYSQL_ERROR
::
WARN_LEVEL_WARN
&&
thd
->
really_abort_on_warning
())
?
MYSQL_ERROR
::
WARN_LEVEL_ERROR
:
level
))
{
DBUG_RETURN
(
NULL
);
}
/* Abort if we are using strict mode and we are not using IGNORE */
if
((
int
)
level
>=
(
int
)
MYSQL_ERROR
::
WARN_LEVEL_WARN
&&
thd
->
really_abort_on_warning
())
{
thd
->
killed
=
THD
::
KILL_BAD_DATA
;
my_message
(
code
,
msg
,
MYF
(
0
));
DBUG_RETURN
(
NULL
);
}
if
(
thd
->
warn_list
.
elements
<
thd
->
variables
.
max_error_count
)
if
(
thd
->
warn_list
.
elements
<
thd
->
variables
.
max_error_count
)
{
{
...
@@ -136,7 +119,8 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
...
@@ -136,7 +119,8 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level,
*/
*/
MEM_ROOT
*
old_root
=
thd
->
mem_root
;
MEM_ROOT
*
old_root
=
thd
->
mem_root
;
thd
->
mem_root
=
&
thd
->
warn_root
;
thd
->
mem_root
=
&
thd
->
warn_root
;
if
((
err
=
new
MYSQL_ERROR
(
thd
,
code
,
level
,
msg
)))
err
=
new
MYSQL_ERROR
(
thd
,
code
,
level
,
msg
);
if
(
err
)
thd
->
warn_list
.
push_back
(
err
);
thd
->
warn_list
.
push_back
(
err
);
thd
->
mem_root
=
old_root
;
thd
->
mem_root
=
old_root
;
}
}
...
@@ -184,14 +168,14 @@ void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level,
...
@@ -184,14 +168,14 @@ void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level,
Takes into account the current LIMIT
Takes into account the current LIMIT
RETURN VALUES
RETURN VALUES
FALSE
ok
0
ok
TRUE
Error sending data to client
1
Error sending data to client
*/
*/
static
const
char
*
warning_level_names
[]
=
{
"Note"
,
"Warning"
,
"Error"
,
"?"
};
static
const
char
*
warning_level_names
[]
=
{
"Note"
,
"Warning"
,
"Error"
,
"?"
};
static
int
warning_level_length
[]
=
{
4
,
7
,
5
,
1
};
static
int
warning_level_length
[]
=
{
4
,
7
,
5
,
1
};
bool
mysqld_show_warnings
(
THD
*
thd
,
ulong
levels_to_show
)
my_
bool
mysqld_show_warnings
(
THD
*
thd
,
ulong
levels_to_show
)
{
{
List
<
Item
>
field_list
;
List
<
Item
>
field_list
;
DBUG_ENTER
(
"mysqld_show_warnings"
);
DBUG_ENTER
(
"mysqld_show_warnings"
);
...
@@ -200,9 +184,8 @@ bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
...
@@ -200,9 +184,8 @@ bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
field_list
.
push_back
(
new
Item_return_int
(
"Code"
,
4
,
MYSQL_TYPE_LONG
));
field_list
.
push_back
(
new
Item_return_int
(
"Code"
,
4
,
MYSQL_TYPE_LONG
));
field_list
.
push_back
(
new
Item_empty_string
(
"Message"
,
MYSQL_ERRMSG_SIZE
));
field_list
.
push_back
(
new
Item_empty_string
(
"Message"
,
MYSQL_ERRMSG_SIZE
));
if
(
thd
->
protocol
->
send_fields
(
&
field_list
,
if
(
thd
->
protocol
->
send_fields
(
&
field_list
,
1
))
Protocol
::
SEND_NUM_ROWS
|
Protocol
::
SEND_EOF
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
TRUE
);
MYSQL_ERROR
*
err
;
MYSQL_ERROR
*
err
;
SELECT_LEX
*
sel
=
&
thd
->
lex
->
select_lex
;
SELECT_LEX
*
sel
=
&
thd
->
lex
->
select_lex
;
...
@@ -226,10 +209,10 @@ bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
...
@@ -226,10 +209,10 @@ bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
protocol
->
store
((
uint32
)
err
->
code
);
protocol
->
store
((
uint32
)
err
->
code
);
protocol
->
store
(
err
->
msg
,
strlen
(
err
->
msg
),
system_charset_info
);
protocol
->
store
(
err
->
msg
,
strlen
(
err
->
msg
),
system_charset_info
);
if
(
protocol
->
write
())
if
(
protocol
->
write
())
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
1
);
if
(
!--
limit
)
if
(
!--
limit
)
break
;
break
;
}
}
send_eof
(
thd
);
send_eof
(
thd
);
DBUG_RETURN
(
FALSE
);
DBUG_RETURN
(
0
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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