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
ee627d25
Commit
ee627d25
authored
May 04, 2004
by
Sinisa@sinisa.nasamreza.org
Browse files
Options
Browse Files
Download
Plain Diff
Merge sinisa@bk-internal.mysql.com:/home/bk/mysql-4.1
into sinisa.nasamreza.org:/mnt/work/mysql-4.1
parents
f1c8e165
68cb444c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
40 additions
and
8 deletions
+40
-8
mysql-test/r/multi_update.result
mysql-test/r/multi_update.result
+1
-0
mysql-test/r/union.result
mysql-test/r/union.result
+12
-0
mysql-test/t/multi_update.test
mysql-test/t/multi_update.test
+4
-0
mysql-test/t/union.test
mysql-test/t/union.test
+5
-0
sql/sql_union.cc
sql/sql_union.cc
+12
-3
sql/sql_update.cc
sql/sql_update.cc
+6
-5
No files found.
mysql-test/r/multi_update.result
View file @
ee627d25
...
...
@@ -324,6 +324,7 @@ a b
7 7
8 8
9 9
update t1,t2 set t1.b=t2.b, t1.a=t2.a where t1.a=t2.a and not exists (select * from t2 where t2.a > 10);
drop table t1,t2;
CREATE TABLE t3 ( KEY1 varchar(50) NOT NULL default '', PARAM_CORR_DISTANCE_RUSH double default NULL, PARAM_CORR_DISTANCE_GEM double default NULL, PARAM_AVG_TARE double default NULL, PARAM_AVG_NB_DAYS double default NULL, PARAM_DEFAULT_PROP_GEM_SRVC varchar(50) default NULL, PARAM_DEFAULT_PROP_GEM_NO_ETIK varchar(50) default NULL, PARAM_SCENARIO_COSTS varchar(50) default NULL, PARAM_DEFAULT_WAGON_COST double default NULL, tmp int(11) default NULL, PRIMARY KEY (KEY1)) ENGINE=MyISAM;
INSERT INTO t3 VALUES ('A',1,1,22,3.2,'R','R','BASE2',0.24,NULL);
...
...
mysql-test/r/union.result
View file @
ee627d25
...
...
@@ -924,3 +924,15 @@ a
1
2
2
set sql_select_limit=1;
select 1 union select 2;
1
1
(select 1) union (select 2);
1
1
(select 1) union (select 2) union (select 3) limit 2;
1
1
2
set sql_select_limit=default;
mysql-test/t/multi_update.test
View file @
ee627d25
...
...
@@ -260,6 +260,10 @@ update t1,t2 set t1.b=t1.b+2,t2.b=t1.b+10 where t1.b between 3 and 5 and t2.a=t1
select
*
from
t1
;
select
*
from
t2
;
# test for non-updating table which is also used in sub-select
update
t1
,
t2
set
t1
.
b
=
t2
.
b
,
t1
.
a
=
t2
.
a
where
t1
.
a
=
t2
.
a
and
not
exists
(
select
*
from
t2
where
t2
.
a
>
10
);
drop
table
t1
,
t2
;
CREATE
TABLE
t3
(
KEY1
varchar
(
50
)
NOT
NULL
default
''
,
PARAM_CORR_DISTANCE_RUSH
double
default
NULL
,
PARAM_CORR_DISTANCE_GEM
double
default
NULL
,
PARAM_AVG_TARE
double
default
NULL
,
PARAM_AVG_NB_DAYS
double
default
NULL
,
PARAM_DEFAULT_PROP_GEM_SRVC
varchar
(
50
)
default
NULL
,
PARAM_DEFAULT_PROP_GEM_NO_ETIK
varchar
(
50
)
default
NULL
,
PARAM_SCENARIO_COSTS
varchar
(
50
)
default
NULL
,
PARAM_DEFAULT_WAGON_COST
double
default
NULL
,
tmp
int
(
11
)
default
NULL
,
PRIMARY
KEY
(
KEY1
))
ENGINE
=
MyISAM
;
INSERT
INTO
t3
VALUES
(
'A'
,
1
,
1
,
22
,
3.2
,
'R'
,
'R'
,
'BASE2'
,
0.24
,
NULL
);
...
...
mysql-test/t/union.test
View file @
ee627d25
...
...
@@ -498,4 +498,9 @@ select * from t1 UNION ALL select * from t1;
select
*
from
t1
UNION
select
*
from
t1
UNION
ALL
select
*
from
t1
;
drop
table
t1
;
select
1
as
a
union
all
select
1
union
all
select
2
union
select
1
union
all
select
2
;
set
sql_select_limit
=
1
;
select
1
union
select
2
;
(
select
1
)
union
(
select
2
);
(
select
1
)
union
(
select
2
)
union
(
select
3
)
limit
2
;
set
sql_select_limit
=
default
;
sql/sql_union.cc
View file @
ee627d25
...
...
@@ -377,12 +377,21 @@ int st_select_lex_unit::exec()
if
(
!
thd
->
is_fatal_error
)
// Check if EOM
{
ulong
options_tmp
=
thd
->
options
;
/*
We have to take into the account a case when:
SET SQL_SELECT_LIMIT was set.
In mysql_new_select() function this value was copied to
the fake_select_lex node of the top-level unit.
Here below, we just take this value if global LIMIT was not applied
to the entire UNION.
*/
ha_rows
select_limit
=
((
global_parameters
->
select_limit
!=
HA_POS_ERROR
)
?
global_parameters
->
select_limit
:
fake_select_lex
->
select_limit
);
thd
->
lex
->
current_select
=
fake_select_lex
;
offset_limit_cnt
=
global_parameters
->
offset_limit
;
select_limit_cnt
=
global_parameters
->
select_limit
+
global_parameters
->
offset_limit
;
select_limit_cnt
=
select_limit
+
global_parameters
->
offset_limit
;
if
(
select_limit_cnt
<
global_parameters
->
select_limit
)
if
(
select_limit_cnt
<
select_limit
)
select_limit_cnt
=
HA_POS_ERROR
;
// no limit
if
(
select_limit_cnt
==
HA_POS_ERROR
)
options_tmp
&=
~
OPTION_FOUND_ROWS
;
...
...
sql/sql_update.cc
View file @
ee627d25
...
...
@@ -578,7 +578,7 @@ multi_update::multi_update(THD *thd_arg, TABLE_LIST *table_list,
int
multi_update
::
prepare
(
List
<
Item
>
&
not_used_values
,
SELECT_LEX_UNIT
*
lex_unit
)
{
TABLE_LIST
*
table_ref
;
TABLE_LIST
*
table_ref
,
*
tables
;
SQL_LIST
update
;
table_map
tables_to_update
=
0
;
Item_field
*
item
;
...
...
@@ -604,8 +604,9 @@ int multi_update::prepare(List<Item> ¬_used_values,
We have to check values after setup_tables to get used_keys right in
reference tables
*/
tables
=
thd
->
lex
->
select_lex
.
get_table_list
();
if
(
setup_fields
(
thd
,
0
,
all_
tables
,
*
values
,
1
,
0
,
0
))
if
(
setup_fields
(
thd
,
0
,
tables
,
*
values
,
1
,
0
,
0
))
DBUG_RETURN
(
1
);
/*
...
...
@@ -615,7 +616,7 @@ int multi_update::prepare(List<Item> ¬_used_values,
*/
update
.
empty
();
for
(
table_ref
=
all_
tables
;
table_ref
;
table_ref
=
table_ref
->
next
)
for
(
table_ref
=
tables
;
table_ref
;
table_ref
=
table_ref
->
next
)
{
TABLE
*
table
=
table_ref
->
table
;
if
(
tables_to_update
&
table
->
map
)
...
...
@@ -684,10 +685,10 @@ int multi_update::prepare(List<Item> ¬_used_values,
which will cause an error when reading a row.
(This issue is mostly relevent for MyISAM tables)
*/
for
(
table_ref
=
all_
tables
;
table_ref
;
table_ref
=
table_ref
->
next
)
for
(
table_ref
=
tables
;
table_ref
;
table_ref
=
table_ref
->
next
)
{
TABLE
*
table
=
table_ref
->
table
;
if
(
!
(
tables_to_update
&
table
->
map
)
&&
if
(
!
(
tables_to_update
&
table
->
map
)
||
!
table
->
no_keyread
&&
find_real_table_in_list
(
update_tables
,
table_ref
->
db
,
table_ref
->
real_name
))
table
->
no_cache
=
1
;
// Disable row cache
...
...
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