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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
9d77d8d9
Commit
9d77d8d9
authored
Feb 20, 2006
by
holyfoot@mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk@192.168.21.1:mysql-5.0
into mysql.com:/home/hf/work/mysql-5.0.w2645
parents
796489ea
4e378f7f
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
180 additions
and
44 deletions
+180
-44
mysql-test/r/mix_innodb_myisam_binlog.result
mysql-test/r/mix_innodb_myisam_binlog.result
+24
-0
mysql-test/r/rpl_sp.result
mysql-test/r/rpl_sp.result
+13
-8
mysql-test/r/sql_mode.result
mysql-test/r/sql_mode.result
+16
-0
mysql-test/r/subselect.result
mysql-test/r/subselect.result
+26
-0
mysql-test/t/mix_innodb_myisam_binlog.test
mysql-test/t/mix_innodb_myisam_binlog.test
+33
-1
mysql-test/t/rpl_sp-slave.opt
mysql-test/t/rpl_sp-slave.opt
+1
-1
mysql-test/t/rpl_sp.test
mysql-test/t/rpl_sp.test
+5
-7
mysql-test/t/sql_mode.test
mysql-test/t/sql_mode.test
+9
-0
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+22
-0
sql/log.cc
sql/log.cc
+5
-1
sql/mysqld.cc
sql/mysqld.cc
+2
-2
sql/set_var.cc
sql/set_var.cc
+6
-1
sql/sp_head.cc
sql/sp_head.cc
+3
-9
sql/sql_select.cc
sql/sql_select.cc
+15
-14
No files found.
mysql-test/r/mix_innodb_myisam_binlog.result
View file @
9d77d8d9
...
...
@@ -256,3 +256,27 @@ master-bin.000001 1648 Query 1 # use `test`; create table t2 (n int) engine=inno
master-bin.000001 1748 Query 1 # use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
do release_lock("lock1");
drop table t0,t2;
reset master;
create table t1 (a int) engine=innodb;
create table t2 (a int) engine=myisam;
select get_lock("a",10);
get_lock("a",10)
1
begin;
insert into t1 values(8);
insert into t2 select * from t1;
select get_lock("a",10);
get_lock("a",10)
1
select
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
is not null;
(@a:=load_file("MYSQLTEST_VARDIR/tmp/mix_innodb_myisam_binlog.output"))
is not null
1
select
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%",
@a not like "%#%error_code=%error_code=%";
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
1 1
drop table t1, t2;
mysql-test/r/rpl_sp.result
View file @
9d77d8d9
...
...
@@ -233,20 +233,25 @@ end @ # #
delete from t2;
alter table t2 add unique (a);
drop function fn1;
create function fn1()
create function fn1(
x int
)
returns int
begin
insert into t2 values(
20),(20
);
insert into t2 values(
x),(x
);
return 10;
end|
select fn1();
do fn1(100);
Warnings:
Error 1062 Duplicate entry '100' for key 1
select fn1(20);
ERROR 23000: Duplicate entry '20' for key 1
select * from t2;
a
20
100
select * from t2;
a
20
100
create trigger trg before insert on t1 for each row set new.a= 10;
ERROR 42000: Access denied; you need the SUPER privilege for this operation
delete from t1;
...
...
@@ -324,7 +329,7 @@ insert into t1 values (x);
return x+2;
end
master-bin.000001 # Query 1 # use `mysqltest1`; delete t1,t2 from t1,t2
master-bin.000001 # Query 1 # use `mysqltest1`;
DO
`fn1`(20)
master-bin.000001 # Query 1 # use `mysqltest1`;
SELECT
`fn1`(20)
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t2 values(fn1(21))
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1()
...
...
@@ -351,13 +356,14 @@ end
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t2
master-bin.000001 # Query 1 # use `mysqltest1`; alter table t2 add unique (a)
master-bin.000001 # Query 1 # use `mysqltest1`; drop function fn1
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1()
master-bin.000001 # Query 1 # use `mysqltest1`; create function fn1(
x int
)
returns int
begin
insert into t2 values(
20),(20
);
insert into t2 values(
x),(x
);
return 10;
end
master-bin.000001 # Query 1 # use `mysqltest1`; DO `fn1`()
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(100)
master-bin.000001 # Query 1 # use `mysqltest1`; SELECT `fn1`(20)
master-bin.000001 # Query 1 # use `mysqltest1`; delete from t1
master-bin.000001 # Query 1 # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
master-bin.000001 # Query 1 # use `mysqltest1`; insert into t1 values (1)
...
...
@@ -415,4 +421,3 @@ col
test
DROP PROCEDURE p1;
drop table t1;
reset master;
mysql-test/r/sql_mode.result
View file @
9d77d8d9
...
...
@@ -478,4 +478,20 @@ v1 CREATE ALGORITHM=UNDEFINED DEFINER="root"@"localhost" SQL SECURITY DEFINER VI
create view v2 as select a from t2 where a in (select a from v1);
drop view v2, v1;
drop table t1, t2;
select @@sql_mode;
@@sql_mode
ANSI_QUOTES
set sql_mode=2097152;
select @@sql_mode;
@@sql_mode
STRICT_TRANS_TABLES
set sql_mode=16384+(65536*4);
select @@sql_mode;
@@sql_mode
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_TABLE_OPTIONS,ANSI
set sql_mode=2147483648;
ERROR 42000: Variable 'sql_mode' can't be set to the value of '2147483648'
select @@sql_mode;
@@sql_mode
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_TABLE_OPTIONS,ANSI
SET @@SQL_MODE=@OLD_SQL_MODE;
mysql-test/r/subselect.result
View file @
9d77d8d9
...
...
@@ -3131,3 +3131,29 @@ a sum
3 20
4 40
DROP TABLE t1,t2,t3;
CREATE TABLE t1 (a varchar(5), b varchar(10));
INSERT INTO t1 VALUES
('AAA', 5), ('BBB', 4), ('BBB', 1), ('CCC', 2),
('CCC', 7), ('AAA', 2), ('AAA', 4), ('BBB', 3), ('AAA', 8);
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
a b
BBB 4
CCC 7
AAA 8
EXPLAIN
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
2 DEPENDENT SUBQUERY t1 ALL NULL NULL NULL NULL 9 Using temporary; Using filesort
ALTER TABLE t1 ADD INDEX(a);
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
a b
BBB 4
CCC 7
AAA 8
EXPLAIN
SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
2 DEPENDENT SUBQUERY t1 index NULL a 8 NULL 9 Using filesort
DROP TABLE t1;
mysql-test/t/mix_innodb_myisam_binlog.test
View file @
9d77d8d9
...
...
@@ -259,5 +259,37 @@ show binlog events from 98;
do
release_lock
(
"lock1"
);
drop
table
t0
,
t2
;
# End of 4.1 tests
# Test for BUG#16559 (ROLLBACK should always have a zero error code in
# binlog). Has to be here and not earlier, as the SELECTs influence
# XIDs differently between normal and ps-protocol (and SHOW BINLOG
# EVENTS above read XIDs).
connect
(
con4
,
localhost
,
root
,,);
connection
con3
;
reset
master
;
create
table
t1
(
a
int
)
engine
=
innodb
;
create
table
t2
(
a
int
)
engine
=
myisam
;
select
get_lock
(
"a"
,
10
);
begin
;
insert
into
t1
values
(
8
);
insert
into
t2
select
*
from
t1
;
disconnect
con3
;
connection
con4
;
select
get_lock
(
"a"
,
10
);
# wait for rollback to finish
# we check that the error code of the "ROLLBACK" event is 0 and not
# ER_SERVER_SHUTDOWN (i.e. disconnection just rolls back transaction
# and does not make slave to stop)
--
exec
$MYSQL_BINLOG
--
start
-
position
=
547
$MYSQLTEST_VARDIR
/
log
/
master
-
bin
.
000001
>
$MYSQLTEST_VARDIR
/
tmp
/
mix_innodb_myisam_binlog
.
output
--
replace_result
$MYSQLTEST_VARDIR
MYSQLTEST_VARDIR
eval
select
(
@
a
:=
load_file
(
"
$MYSQLTEST_VARDIR
/tmp/mix_innodb_myisam_binlog.output"
))
is
not
null
;
--
replace_result
$MYSQL_TEST_DIR
MYSQL_TEST_DIR
eval
select
@
a
like
"%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%"
,
@
a
not
like
"%#%error_code=%error_code=%"
;
drop
table
t1
,
t2
;
mysql-test/t/rpl_sp-slave.opt
View file @
9d77d8d9
--log_bin_trust_routine_creators=0
--slave-skip-errors=1062
--log_bin_trust_routine_creators=0
mysql-test/t/rpl_sp.test
View file @
9d77d8d9
...
...
@@ -294,21 +294,19 @@ alter table t2 add unique (a);
drop
function
fn1
;
delimiter
|
;
create
function
fn1
()
create
function
fn1
(
x
int
)
returns
int
begin
insert
into
t2
values
(
20
),(
20
);
insert
into
t2
values
(
x
),(
x
);
return
10
;
end
|
delimiter
;
|
# Because of BUG#14769 the following statement requires that we start
# slave with --slave-skip-errors=1062. When that bug is fixed, that
# option can be removed.
do
fn1
(
100
);
--
error
1062
select
fn1
();
select
fn1
(
20
);
select
*
from
t2
;
sync_slave_with_master
;
...
...
@@ -440,4 +438,4 @@ DROP PROCEDURE p1;
# cleanup
connection
master
;
drop
table
t1
;
reset
master
;
sync_slave_with_
master
;
mysql-test/t/sql_mode.test
View file @
9d77d8d9
...
...
@@ -255,4 +255,13 @@ create view v2 as select a from t2 where a in (select a from v1);
drop
view
v2
,
v1
;
drop
table
t1
,
t2
;
select
@@
sql_mode
;
set
sql_mode
=
2097152
;
select
@@
sql_mode
;
set
sql_mode
=
16384
+
(
65536
*
4
);
select
@@
sql_mode
;
--
error
1231
set
sql_mode
=
2147483648
;
# that mode does not exist
select
@@
sql_mode
;
SET
@@
SQL_MODE
=@
OLD_SQL_MODE
;
mysql-test/t/subselect.test
View file @
9d77d8d9
...
...
@@ -2051,3 +2051,25 @@ SELECT t1.a, SUM(b) AS sum FROM t1 GROUP BY t1.a
HAVING
t2
.
c
+
sum
>
20
);
DROP
TABLE
t1
,
t2
,
t3
;
#
# Test for bug #16603: GROUP BY in a row subquery with a quantifier
# when an index is defined on the grouping field
CREATE
TABLE
t1
(
a
varchar
(
5
),
b
varchar
(
10
));
INSERT
INTO
t1
VALUES
(
'AAA'
,
5
),
(
'BBB'
,
4
),
(
'BBB'
,
1
),
(
'CCC'
,
2
),
(
'CCC'
,
7
),
(
'AAA'
,
2
),
(
'AAA'
,
4
),
(
'BBB'
,
3
),
(
'AAA'
,
8
);
SELECT
*
FROM
t1
WHERE
(
a
,
b
)
=
ANY
(
SELECT
a
,
max
(
b
)
FROM
t1
GROUP
BY
a
);
EXPLAIN
SELECT
*
FROM
t1
WHERE
(
a
,
b
)
=
ANY
(
SELECT
a
,
max
(
b
)
FROM
t1
GROUP
BY
a
);
ALTER
TABLE
t1
ADD
INDEX
(
a
);
SELECT
*
FROM
t1
WHERE
(
a
,
b
)
=
ANY
(
SELECT
a
,
max
(
b
)
FROM
t1
GROUP
BY
a
);
EXPLAIN
SELECT
*
FROM
t1
WHERE
(
a
,
b
)
=
ANY
(
SELECT
a
,
max
(
b
)
FROM
t1
GROUP
BY
a
);
DROP
TABLE
t1
;
sql/log.cc
View file @
9d77d8d9
...
...
@@ -132,6 +132,7 @@ static int binlog_commit(THD *thd, bool all)
DBUG_RETURN
(
0
);
}
Query_log_event
qev
(
thd
,
STRING_WITH_LEN
(
"COMMIT"
),
TRUE
,
FALSE
);
qev
.
error_code
=
0
;
// see comment in MYSQL_LOG::write(THD, IO_CACHE)
DBUG_RETURN
(
binlog_end_trans
(
thd
,
trans_log
,
&
qev
));
}
...
...
@@ -156,6 +157,7 @@ static int binlog_rollback(THD *thd, bool all)
if
(
unlikely
(
thd
->
options
&
OPTION_STATUS_NO_TRANS_UPDATE
))
{
Query_log_event
qev
(
thd
,
STRING_WITH_LEN
(
"ROLLBACK"
),
TRUE
,
FALSE
);
qev
.
error_code
=
0
;
// see comment in MYSQL_LOG::write(THD, IO_CACHE)
error
=
binlog_end_trans
(
thd
,
trans_log
,
&
qev
);
}
else
...
...
@@ -1826,7 +1828,9 @@ bool MYSQL_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
Imagine this is rollback due to net timeout, after all statements of
the transaction succeeded. Then we want a zero-error code in BEGIN.
In other words, if there was a really serious error code it's already
in the statement's events.
in the statement's events, there is no need to put it also in this
internally generated event, and as this event is generated late it
would lead to false alarms.
This is safer than thd->clear_error() against kills at shutdown.
*/
qinfo
.
error_code
=
0
;
...
...
sql/mysqld.cc
View file @
9d77d8d9
...
...
@@ -4923,8 +4923,8 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite,
*/
{
"log-bin-trust-function-creators"
,
OPT_LOG_BIN_TRUST_FUNCTION_CREATORS
,
"If equal to 0 (the default), then when --log-bin is used, creation of "
"a
function is allowed only to users having the SUPER privilege and only
"
"if this function may not break binary logging."
,
"a
stored function is allowed only to users having the SUPER privilege and
"
"
only
if this function may not break binary logging."
,
(
gptr
*
)
&
trust_function_creators
,
(
gptr
*
)
&
trust_function_creators
,
0
,
GET_BOOL
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"log-error"
,
OPT_ERROR_LOG_FILE
,
"Error log file."
,
...
...
sql/set_var.cc
View file @
9d77d8d9
...
...
@@ -1659,7 +1659,12 @@ bool sys_var::check_set(THD *thd, set_var *var, TYPELIB *enum_names)
else
{
ulonglong
tmp
=
var
->
value
->
val_int
();
if
(
tmp
>=
enum_names
->
count
)
/*
For when the enum is made to contain 64 elements, as 1ULL<<64 is
undefined, we guard with a "count<64" test.
*/
if
(
unlikely
((
tmp
>=
((
ULL
(
1
))
<<
enum_names
->
count
))
&&
(
enum_names
->
count
<
64
)))
{
llstr
(
tmp
,
buff
);
goto
err
;
...
...
sql/sp_head.cc
View file @
9d77d8d9
...
...
@@ -736,13 +736,7 @@ int cmp_splocal_locations(Item_splocal * const *a, Item_splocal * const *b)
Statements that have is_update_query(stmt) == FALSE (e.g. SELECTs) are not
written into binary log. Instead we catch function calls the statement
makes and write it into binary log separately (see #3).
We actually can easily write SELECT statements into the binary log in the
right order (we don't have issues with const tables being unlocked early
because SELECTs that use FUNCTIONs unlock all tables at once) We don't do
it because replication slave thread currently can't execute SELECT
statements. Fixing this is on the TODO.
2. PROCEDURE calls
CALL statements are not written into binary log. Instead
...
...
@@ -763,7 +757,7 @@ int cmp_splocal_locations(Item_splocal * const *a, Item_splocal * const *b)
function execution (grep for start_union_events and stop_union_events)
If the answers are No and Yes, we write the function call into the binary
log as "
DO spfunc(<param1value>, <param2value>, ...)"
log as "
SELECT spfunc(<param1value>, <param2value>, ...)".
4. Miscellaneous issues.
...
...
@@ -1310,7 +1304,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
char
buf
[
256
];
String
bufstr
(
buf
,
sizeof
(
buf
),
&
my_charset_bin
);
bufstr
.
length
(
0
);
bufstr
.
append
(
STRING_WITH_LEN
(
"
DO
"
));
bufstr
.
append
(
STRING_WITH_LEN
(
"
SELECT
"
));
append_identifier
(
thd
,
&
bufstr
,
m_name
.
str
,
m_name
.
length
);
bufstr
.
append
(
'('
);
for
(
uint
i
=
0
;
i
<
argcount
;
i
++
)
...
...
sql/sql_select.cc
View file @
9d77d8d9
...
...
@@ -364,22 +364,8 @@ JOIN::prepare(Item ***rref_pointer_array,
select_lex
->
having_fix_field
=
0
;
if
(
having_fix_rc
||
thd
->
net
.
report_error
)
DBUG_RETURN
(
-
1
);
/* purecov: inspected */
if
(
having
->
with_sum_func
)
having
->
split_sum_func2
(
thd
,
ref_pointer_array
,
all_fields
,
&
having
,
TRUE
);
thd
->
lex
->
allow_sum_func
=
save_allow_sum_func
;
}
if
(
select_lex
->
inner_sum_func_list
)
{
Item_sum
*
end
=
select_lex
->
inner_sum_func_list
;
Item_sum
*
item_sum
=
end
;
do
{
item_sum
=
item_sum
->
next
;
item_sum
->
split_sum_func2
(
thd
,
ref_pointer_array
,
all_fields
,
item_sum
->
ref_by
,
FALSE
);
}
while
(
item_sum
!=
end
);
}
if
(
!
thd
->
lex
->
view_prepare_mode
)
{
...
...
@@ -397,6 +383,21 @@ JOIN::prepare(Item ***rref_pointer_array,
}
}
if
(
having
&&
having
->
with_sum_func
)
having
->
split_sum_func2
(
thd
,
ref_pointer_array
,
all_fields
,
&
having
,
TRUE
);
if
(
select_lex
->
inner_sum_func_list
)
{
Item_sum
*
end
=
select_lex
->
inner_sum_func_list
;
Item_sum
*
item_sum
=
end
;
do
{
item_sum
=
item_sum
->
next
;
item_sum
->
split_sum_func2
(
thd
,
ref_pointer_array
,
all_fields
,
item_sum
->
ref_by
,
FALSE
);
}
while
(
item_sum
!=
end
);
}
if
(
setup_ftfuncs
(
select_lex
))
/* should be after having->fix_fields */
DBUG_RETURN
(
-
1
);
...
...
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