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
d75c649b
Commit
d75c649b
authored
Aug 04, 2003
by
bar@bar.mysql.r18.ru
Browse files
Options
Browse Files
Download
Plain Diff
Merge abarkov@build.mysql.com:/home/bk/mysql-4.1
into bar.mysql.r18.ru:/usr/home/bar/mysql-4.1
parents
44c0ca61
fbe49f0c
Changes
19
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
141 additions
and
827 deletions
+141
-827
BitKeeper/etc/logging_ok
BitKeeper/etc/logging_ok
+2
-0
mysql-test/r/fulltext2.result
mysql-test/r/fulltext2.result
+0
-765
mysql-test/r/query_cache.result
mysql-test/r/query_cache.result
+22
-12
mysql-test/r/subselect.result
mysql-test/r/subselect.result
+13
-12
mysql-test/t/fulltext2.test
mysql-test/t/fulltext2.test
+2
-0
mysql-test/t/query_cache.test
mysql-test/t/query_cache.test
+12
-2
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+20
-8
sql/item.cc
sql/item.cc
+15
-9
sql/item.h
sql/item.h
+0
-1
sql/item_subselect.cc
sql/item_subselect.cc
+1
-1
sql/sql_acl.cc
sql/sql_acl.cc
+11
-2
sql/sql_cache.cc
sql/sql_cache.cc
+2
-2
sql/sql_derived.cc
sql/sql_derived.cc
+2
-1
sql/sql_lex.cc
sql/sql_lex.cc
+3
-2
sql/sql_lex.h
sql/sql_lex.h
+21
-4
sql/sql_parse.cc
sql/sql_parse.cc
+2
-0
sql/sql_select.cc
sql/sql_select.cc
+2
-1
sql/sql_union.cc
sql/sql_union.cc
+2
-1
sql/sql_yacc.yy
sql/sql_yacc.yy
+9
-4
No files found.
BitKeeper/etc/logging_ok
View file @
d75c649b
...
@@ -53,6 +53,8 @@ jcole@sarvik.tfr.cafe.ee
...
@@ -53,6 +53,8 @@ jcole@sarvik.tfr.cafe.ee
jcole@tetra.spaceapes.com
jcole@tetra.spaceapes.com
jorge@linux.jorge.mysql.com
jorge@linux.jorge.mysql.com
kaj@work.mysql.com
kaj@work.mysql.com
konstantin@mysql.com
kostja@oak.local
lenz@kallisto.mysql.com
lenz@kallisto.mysql.com
lenz@mysql.com
lenz@mysql.com
miguel@hegel.(none)
miguel@hegel.(none)
...
...
mysql-test/r/fulltext2.result
View file @
d75c649b
This diff is collapsed.
Click to expand it.
mysql-test/r/query_cache.result
View file @
d75c649b
...
@@ -374,22 +374,23 @@ drop database mysqltest;
...
@@ -374,22 +374,23 @@ drop database mysqltest;
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 0
Qcache_queries_in_cache 0
create table t1 (a char(1) not null);
create table t1 (a char(1) not null collate koi8r_general_ci);
insert into t1 values("");
insert into t1 values(_koi8r"");
set CHARACTER SET koi8r;
select * from t1;
select * from t1;
a
a
set CHARACTER SET cp1251_koi8;
set CHARACTER SET cp1251_koi8;
select * from t1;
select * from t1;
a
a
set CHARACTER SET DEFAULT;
set CHARACTER SET DEFAULT;
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache
1
Qcache_queries_in_cache
2
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits
5
Qcache_hits
4
drop table t1;
drop table t1;
create database if not exists mysqltest;
create database if not exists mysqltest;
create table mysqltest.t1 (i int not null);
create table mysqltest.t1 (i int not null);
...
@@ -415,7 +416,7 @@ Variable_name Value
...
@@ -415,7 +416,7 @@ Variable_name Value
Qcache_queries_in_cache 2
Qcache_queries_in_cache 2
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits
7
Qcache_hits
6
drop database mysqltest;
drop database mysqltest;
drop table t1;
drop table t1;
create table t1 (i int not null);
create table t1 (i int not null);
...
@@ -429,7 +430,7 @@ FOUND_ROWS()
...
@@ -429,7 +430,7 @@ FOUND_ROWS()
4
4
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits
7
Qcache_hits
6
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 1
Qcache_queries_in_cache 1
...
@@ -441,7 +442,7 @@ FOUND_ROWS()
...
@@ -441,7 +442,7 @@ FOUND_ROWS()
1
1
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits
7
Qcache_hits
6
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 2
Qcache_queries_in_cache 2
...
@@ -454,7 +455,7 @@ FOUND_ROWS()
...
@@ -454,7 +455,7 @@ FOUND_ROWS()
4
4
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits
8
Qcache_hits
7
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 2
Qcache_queries_in_cache 2
...
@@ -466,7 +467,7 @@ FOUND_ROWS()
...
@@ -466,7 +467,7 @@ FOUND_ROWS()
1
1
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits
9
Qcache_hits
8
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 2
Qcache_queries_in_cache 2
...
@@ -535,7 +536,7 @@ a
...
@@ -535,7 +536,7 @@ a
3
3
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits 1
2
Qcache_hits 1
1
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 2
Qcache_queries_in_cache 2
...
@@ -552,7 +553,7 @@ a
...
@@ -552,7 +553,7 @@ a
3
3
show status like "Qcache_hits";
show status like "Qcache_hits";
Variable_name Value
Variable_name Value
Qcache_hits 1
3
Qcache_hits 1
2
show status like "Qcache_queries_in_cache";
show status like "Qcache_queries_in_cache";
Variable_name Value
Variable_name Value
Qcache_queries_in_cache 2
Qcache_queries_in_cache 2
...
@@ -561,6 +562,15 @@ set GLOBAL query_cache_min_res_unit=default;
...
@@ -561,6 +562,15 @@ set GLOBAL query_cache_min_res_unit=default;
show global variables like "query_cache_min_res_unit";
show global variables like "query_cache_min_res_unit";
Variable_name Value
Variable_name Value
query_cache_min_res_unit 4096
query_cache_min_res_unit 4096
create table t1 (a int not null);
insert into t1 values (1);
select "aaa" from t1;
aaa
aaa
select "AAA" from t1;
AAA
AAA
drop table t1;
create table t1 (a int);
create table t1 (a int);
set GLOBAL query_cache_size=1000;
set GLOBAL query_cache_size=1000;
show global variables like "query_cache_size";
show global variables like "query_cache_size";
...
...
mysql-test/r/subselect.result
View file @
d75c649b
...
@@ -1225,16 +1225,17 @@ a (select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 an
...
@@ -1225,16 +1225,17 @@ a (select count(distinct t1.b) as sum from t1,t2 where t1.a=t2.a and t2.b > 0 an
2 2
2 2
1 2
1 2
drop table t1,t2,t3;
drop table t1,t2,t3;
create table t1 (a char(10) character set koi8r collate koi8r_bin);
create table t1 (s1 int);
create table t2 select (select a from t1);
create table t2 (s1 int);
show create table t2;
insert into t1 values (1);
Table Create Table
insert into t2 values (1);
t2 CREATE TABLE `t2` (
select * from t1 where exists (select s1 from t2 having max(t2.s1)=t1.s1);
`(select a from t1)` char(10) character set koi8r collate koi8r_bin default NULL
s1
) TYPE=MyISAM CHARSET=latin1
drop table t1,t2;
drop table t1,t2;
CREATE TABLE t1
create table t1 (s1 int);
(s1 CHAR(5) COLLATE latin1_german1_ci,
create table t2 (s1 int);
s2 CHAR(5) COLLATE latin1_swedish_ci);
insert into t1 values (1);
SELECT * FROM t1 WHERE s1 = (SELECT s2 FROM t1);
insert into t2 values (1);
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='
update t1 set s1 = s1 + 1 where 1 = (select x.s1 as A from t2 WHERE t2.s1 > t1.s1 order by A);
ERROR 42S02: Unknown table 'x' in field list
DROP TABLE t1, t2;
mysql-test/t/fulltext2.test
View file @
d75c649b
...
@@ -17,6 +17,7 @@ CREATE TABLE t1 (
...
@@ -17,6 +17,7 @@ CREATE TABLE t1 (
)
TYPE
=
MyISAM
;
)
TYPE
=
MyISAM
;
# two-level entry, second-level tree with depth 2
# two-level entry, second-level tree with depth 2
--
disable_query_log
let
$
1
=
260
;
let
$
1
=
260
;
while
(
$
1
)
while
(
$
1
)
{
{
...
@@ -39,6 +40,7 @@ while ($1)
...
@@ -39,6 +40,7 @@ while ($1)
eval
insert
t1
(
a
)
values
(
'aaayyy'
);
eval
insert
t1
(
a
)
values
(
'aaayyy'
);
dec
$
1
;
dec
$
1
;
}
}
--
enable_query_log
# converting to two-level
# converting to two-level
repair
table
t1
quick
;
repair
table
t1
quick
;
...
...
mysql-test/t/query_cache.test
View file @
d75c649b
...
@@ -260,8 +260,9 @@ show status like "Qcache_queries_in_cache";
...
@@ -260,8 +260,9 @@ show status like "Qcache_queries_in_cache";
#
#
# Charset convertion (cp1251_koi8 always present)
# Charset convertion (cp1251_koi8 always present)
#
#
create
table
t1
(
a
char
(
1
)
not
null
);
create
table
t1
(
a
char
(
1
)
not
null
collate
koi8r_general_ci
);
insert
into
t1
values
(
""
);
insert
into
t1
values
(
_koi8r
""
);
set
CHARACTER
SET
koi8r
;
select
*
from
t1
;
select
*
from
t1
;
set
CHARACTER
SET
cp1251_koi8
;
set
CHARACTER
SET
cp1251_koi8
;
select
*
from
t1
;
select
*
from
t1
;
...
@@ -368,6 +369,15 @@ drop table t2;
...
@@ -368,6 +369,15 @@ drop table t2;
set
GLOBAL
query_cache_min_res_unit
=
default
;
set
GLOBAL
query_cache_min_res_unit
=
default
;
show
global
variables
like
"query_cache_min_res_unit"
;
show
global
variables
like
"query_cache_min_res_unit"
;
#
# Case sensitive test
#
create
table
t1
(
a
int
not
null
);
insert
into
t1
values
(
1
);
select
"aaa"
from
t1
;
select
"AAA"
from
t1
;
drop
table
t1
;
#
#
# Test of query cache resizing
# Test of query cache resizing
#
#
...
...
mysql-test/t/subselect.test
View file @
d75c649b
...
@@ -807,6 +807,7 @@ INSERT INTO t1 VALUES("2f6161e879db43c1a5b82c21ddc49089", "Default", "System", "
...
@@ -807,6 +807,7 @@ INSERT INTO t1 VALUES("2f6161e879db43c1a5b82c21ddc49089", "Default", "System", "
INSERT
INTO
t1
VALUES
(
"c373e9f5ad0791724315444553544200"
,
"AddDocumentTest"
,
"admin"
,
"2003-06-09 10:51:25"
,
"Movie Reviews"
,
"0"
,
"2003-06-09 10:51:25"
,
"admin"
,
"0"
,
"2f6161e879db43c1a5b82c21ddc49089"
,
"03eea05112b845949f3fd03278b5fe43"
,
NULL
);
INSERT
INTO
t1
VALUES
(
"c373e9f5ad0791724315444553544200"
,
"AddDocumentTest"
,
"admin"
,
"2003-06-09 10:51:25"
,
"Movie Reviews"
,
"0"
,
"2003-06-09 10:51:25"
,
"admin"
,
"0"
,
"2f6161e879db43c1a5b82c21ddc49089"
,
"03eea05112b845949f3fd03278b5fe43"
,
NULL
);
SELECT
'c373e9f5ad0791a0dab5444553544200'
IN
(
SELECT
t1
.
FOLDERID
FROM
t1
WHERE
t1
.
PARENTID
=
'2f6161e879db43c1a5b82c21ddc49089'
AND
t1
.
FOLDERNAME
=
'Level1'
);
SELECT
'c373e9f5ad0791a0dab5444553544200'
IN
(
SELECT
t1
.
FOLDERID
FROM
t1
WHERE
t1
.
PARENTID
=
'2f6161e879db43c1a5b82c21ddc49089'
AND
t1
.
FOLDERNAME
=
'Level1'
);
drop
table
t1
;
drop
table
t1
;
#
#
# alloc_group_fields() working
# alloc_group_fields() working
#
#
...
@@ -819,13 +820,24 @@ insert into t3 values (3,3), (2,2), (1,1);
...
@@ -819,13 +820,24 @@ insert into t3 values (3,3), (2,2), (1,1);
select
a
,(
select
count
(
distinct
t1
.
b
)
as
sum
from
t1
,
t2
where
t1
.
a
=
t2
.
a
and
t2
.
b
>
0
and
t1
.
a
<=
t3
.
b
group
by
t1
.
a
order
by
sum
limit
1
)
from
t3
;
select
a
,(
select
count
(
distinct
t1
.
b
)
as
sum
from
t1
,
t2
where
t1
.
a
=
t2
.
a
and
t2
.
b
>
0
and
t1
.
a
<=
t3
.
b
group
by
t1
.
a
order
by
sum
limit
1
)
from
t3
;
drop
table
t1
,
t2
,
t3
;
drop
table
t1
,
t2
,
t3
;
create
table
t1
(
a
char
(
10
)
character
set
koi8r
collate
koi8r_bin
);
#
create
table
t2
select
(
select
a
from
t1
);
# aggregate functions in HAVING test
show
create
table
t2
;
#
create
table
t1
(
s1
int
);
create
table
t2
(
s1
int
);
insert
into
t1
values
(
1
);
insert
into
t2
values
(
1
);
select
*
from
t1
where
exists
(
select
s1
from
t2
having
max
(
t2
.
s1
)
=
t1
.
s1
);
drop
table
t1
,
t2
;
drop
table
t1
,
t2
;
#
# update subquery with wrong field (to force name resolving
# in UPDATE name space)
#
create
table
t1
(
s1
int
);
create
table
t2
(
s1
int
);
insert
into
t1
values
(
1
);
insert
into
t2
values
(
1
);
--
error
1109
update
t1
set
s1
=
s1
+
1
where
1
=
(
select
x
.
s1
as
A
from
t2
WHERE
t2
.
s1
>
t1
.
s1
order
by
A
);
DROP
TABLE
t1
,
t2
;
CREATE
TABLE
t1
(
s1
CHAR
(
5
)
COLLATE
latin1_german1_ci
,
s2
CHAR
(
5
)
COLLATE
latin1_swedish_ci
);
--
error
1265
SELECT
*
FROM
t1
WHERE
s1
=
(
SELECT
s2
FROM
t1
);
sql/item.cc
View file @
d75c649b
...
@@ -49,15 +49,19 @@ Item::Item():
...
@@ -49,15 +49,19 @@ Item::Item():
THD
*
thd
=
current_thd
;
THD
*
thd
=
current_thd
;
next
=
thd
->
free_list
;
// Put in free list
next
=
thd
->
free_list
;
// Put in free list
thd
->
free_list
=
this
;
thd
->
free_list
=
this
;
loop_id
=
0
;
/*
/*
Item constructor can be called during execution other tnen SQL_COM
Item constructor can be called during execution other tnen SQL_COM
command => we should check thd->lex.current_select on zero (thd->lex
command => we should check thd->lex.current_select on zero (thd->lex
can be uninitialised)
can be uninitialised)
*/
*/
if
(
thd
->
lex
.
current_select
&&
if
(
thd
->
lex
.
current_select
)
thd
->
lex
.
current_select
->
parsing_place
==
SELECT_LEX_NODE
::
SELECT_LIST
)
{
thd
->
lex
.
current_select
->
select_items
++
;
SELECT_LEX_NODE
::
enum_parsing_place
place
=
thd
->
lex
.
current_select
->
parsing_place
;
if
(
place
==
SELECT_LEX_NODE
::
SELECT_LIST
||
place
==
SELECT_LEX_NODE
::
IN_HAVING
)
thd
->
lex
.
current_select
->
select_n_having_items
++
;
}
}
}
/*
/*
...
@@ -66,7 +70,6 @@ Item::Item():
...
@@ -66,7 +70,6 @@ Item::Item():
tables
tables
*/
*/
Item
::
Item
(
THD
*
thd
,
Item
&
item
)
:
Item
::
Item
(
THD
*
thd
,
Item
&
item
)
:
loop_id
(
0
),
str_value
(
item
.
str_value
),
str_value
(
item
.
str_value
),
name
(
item
.
name
),
name
(
item
.
name
),
max_length
(
item
.
max_length
),
max_length
(
item
.
max_length
),
...
@@ -867,7 +870,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
...
@@ -867,7 +870,7 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
sl
=
sl
->
outer_select
())
sl
=
sl
->
outer_select
())
{
{
table_list
=
(
last
=
sl
)
->
get_table_list
();
table_list
=
(
last
=
sl
)
->
get_table_list
();
if
(
sl
->
insert_select
&&
table_list
)
if
(
sl
->
resolve_mode
==
SELECT_LEX
::
INSERT_MODE
&&
table_list
)
{
{
// it is primary INSERT st_select_lex => skip first table resolving
// it is primary INSERT st_select_lex => skip first table resolving
table_list
=
table_list
->
next
;
table_list
=
table_list
->
next
;
...
@@ -876,7 +879,8 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
...
@@ -876,7 +879,8 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
table_list
,
&
where
,
table_list
,
&
where
,
0
))
!=
not_found_field
)
0
))
!=
not_found_field
)
break
;
break
;
if
((
refer
=
find_item_in_list
(
this
,
sl
->
item_list
,
&
counter
,
if
(
sl
->
resolve_mode
==
SELECT_LEX
::
SELECT_MODE
&&
(
refer
=
find_item_in_list
(
this
,
sl
->
item_list
,
&
counter
,
REPORT_EXCEPT_NOT_FOUND
))
!=
REPORT_EXCEPT_NOT_FOUND
))
!=
(
Item
**
)
not_found_item
)
(
Item
**
)
not_found_item
)
break
;
break
;
...
@@ -1353,13 +1357,15 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
...
@@ -1353,13 +1357,15 @@ bool Item_ref::fix_fields(THD *thd,TABLE_LIST *tables, Item **reference)
SELECT_LEX
*
last
=
0
;
SELECT_LEX
*
last
=
0
;
for
(
;
sl
;
sl
=
sl
->
outer_select
())
for
(
;
sl
;
sl
=
sl
->
outer_select
())
{
{
if
((
ref
=
find_item_in_list
(
this
,
(
last
=
sl
)
->
item_list
,
last
=
sl
;
if
(
sl
->
resolve_mode
==
SELECT_LEX
::
SELECT_MODE
&&
(
ref
=
find_item_in_list
(
this
,
sl
->
item_list
,
&
counter
,
&
counter
,
REPORT_EXCEPT_NOT_FOUND
))
!=
REPORT_EXCEPT_NOT_FOUND
))
!=
(
Item
**
)
not_found_item
)
(
Item
**
)
not_found_item
)
break
;
break
;
table_list
=
sl
->
get_table_list
();
table_list
=
sl
->
get_table_list
();
if
(
sl
->
insert_select
&&
table_list
)
if
(
sl
->
resolve_mode
==
SELECT_LEX
::
INSERT_MODE
&&
table_list
)
{
{
// it is primary INSERT st_select_lex => skip first table resolving
// it is primary INSERT st_select_lex => skip first table resolving
table_list
=
table_list
->
next
;
table_list
=
table_list
->
next
;
...
...
sql/item.h
View file @
d75c649b
...
@@ -83,7 +83,6 @@ public:
...
@@ -83,7 +83,6 @@ public:
};
};
class
Item
{
class
Item
{
uint
loop_id
;
/* Used to find selfrefering loops */
Item
(
const
Item
&
);
/* Prevent use of these */
Item
(
const
Item
&
);
/* Prevent use of these */
void
operator
=
(
Item
&
);
void
operator
=
(
Item
&
);
public:
public:
...
...
sql/item_subselect.cc
View file @
d75c649b
...
@@ -508,7 +508,7 @@ void Item_in_subselect::single_value_transformer(THD *thd,
...
@@ -508,7 +508,7 @@ void Item_in_subselect::single_value_transformer(THD *thd,
{
{
sl
->
item_list
.
push_back
(
item
);
sl
->
item_list
.
push_back
(
item
);
setup_ref_array
(
thd
,
&
sl
->
ref_pointer_array
,
setup_ref_array
(
thd
,
&
sl
->
ref_pointer_array
,
1
+
sl
->
select_items
+
1
+
sl
->
select_
n_having_
items
+
sl
->
order_list
.
elements
+
sl
->
group_list
.
elements
);
sl
->
order_list
.
elements
+
sl
->
group_list
.
elements
);
// To prevent crash on Item_ref_null_helper destruction in case of error
// To prevent crash on Item_ref_null_helper destruction in case of error
sl
->
ref_pointer_array
[
0
]
=
0
;
sl
->
ref_pointer_array
[
0
]
=
0
;
...
...
sql/sql_acl.cc
View file @
d75c649b
...
@@ -3221,8 +3221,17 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
...
@@ -3221,8 +3221,17 @@ int open_grant_tables(THD *thd, TABLE_LIST *tables)
GRANT and REVOKE are applied the slave in/exclusion rules as they are
GRANT and REVOKE are applied the slave in/exclusion rules as they are
some kind of updates to the mysql.% tables.
some kind of updates to the mysql.% tables.
*/
*/
if
(
thd
->
slave_thread
&&
table_rules_on
&&
!
tables_ok
(
0
,
tables
))
if
(
thd
->
slave_thread
&&
table_rules_on
)
{
/*
The tables must be marked "updating" so that tables_ok() takes them into
account in tests.
*/
tables
[
0
].
updating
=
tables
[
1
].
updating
=
tables
[
2
].
updating
=
tables
[
3
].
updating
=
1
;
if
(
!
tables_ok
(
0
,
tables
))
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
tables
[
0
].
updating
=
tables
[
1
].
updating
=
tables
[
2
].
updating
=
tables
[
3
].
updating
=
0
;
}
#endif
#endif
if
(
open_and_lock_tables
(
thd
,
tables
))
if
(
open_and_lock_tables
(
thd
,
tables
))
...
...
sql/sql_cache.cc
View file @
d75c649b
...
@@ -1422,10 +1422,10 @@ ulong Query_cache::init_cache()
...
@@ -1422,10 +1422,10 @@ ulong Query_cache::init_cache()
DUMP
(
this
);
DUMP
(
this
);
VOID
(
hash_init
(
&
queries
,
system_charset_info
,
def_query_hash_size
,
0
,
0
,
VOID
(
hash_init
(
&
queries
,
&
my_charset_bin
,
def_query_hash_size
,
0
,
0
,
query_cache_query_get_key
,
0
,
0
));
query_cache_query_get_key
,
0
,
0
));
#ifndef FN_NO_CASE_SENCE
#ifndef FN_NO_CASE_SENCE
VOID
(
hash_init
(
&
tables
,
system_charset_info
,
def_table_hash_size
,
0
,
0
,
VOID
(
hash_init
(
&
tables
,
&
my_charset_bin
,
def_table_hash_size
,
0
,
0
,
query_cache_table_get_key
,
0
,
0
));
query_cache_table_get_key
,
0
,
0
));
#else
#else
// windows, OS/2 or other case insensitive file names work around
// windows, OS/2 or other case insensitive file names work around
...
...
sql/sql_derived.cc
View file @
d75c649b
...
@@ -126,7 +126,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
...
@@ -126,7 +126,8 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
item_list
=
select_cursor
->
item_list
;
item_list
=
select_cursor
->
item_list
;
select_cursor
->
with_wild
=
0
;
select_cursor
->
with_wild
=
0
;
if
(
setup_ref_array
(
thd
,
&
select_cursor
->
ref_pointer_array
,
if
(
setup_ref_array
(
thd
,
&
select_cursor
->
ref_pointer_array
,
(
item_list
.
elements
+
select_cursor
->
select_items
+
(
item_list
.
elements
+
select_cursor
->
select_n_having_items
+
select_cursor
->
order_list
.
elements
+
select_cursor
->
order_list
.
elements
+
select_cursor
->
group_list
.
elements
))
||
select_cursor
->
group_list
.
elements
))
||
setup_fields
(
thd
,
select_cursor
->
ref_pointer_array
,
first_table
,
setup_fields
(
thd
,
select_cursor
->
ref_pointer_array
,
first_table
,
...
...
sql/sql_lex.cc
View file @
d75c649b
...
@@ -959,7 +959,7 @@ void st_select_lex_node::init_select()
...
@@ -959,7 +959,7 @@ void st_select_lex_node::init_select()
order_list
.
next
=
(
byte
**
)
&
order_list
.
first
;
order_list
.
next
=
(
byte
**
)
&
order_list
.
first
;
select_limit
=
HA_POS_ERROR
;
select_limit
=
HA_POS_ERROR
;
offset_limit
=
0
;
offset_limit
=
0
;
select_items
=
0
;
select_
n_having_
items
=
0
;
with_sum_func
=
0
;
with_sum_func
=
0
;
parsing_place
=
SELECT_LEX_NODE
::
NO_MATTER
;
parsing_place
=
SELECT_LEX_NODE
::
NO_MATTER
;
}
}
...
@@ -986,7 +986,8 @@ void st_select_lex::init_query()
...
@@ -986,7 +986,8 @@ void st_select_lex::init_query()
join
=
0
;
join
=
0
;
where
=
0
;
where
=
0
;
olap
=
UNSPECIFIED_OLAP_TYPE
;
olap
=
UNSPECIFIED_OLAP_TYPE
;
insert_select
=
having_fix_field
=
0
;
having_fix_field
=
0
;
resolve_mode
=
NOMATTER_MODE
;
with_wild
=
0
;
with_wild
=
0
;
}
}
...
...
sql/sql_lex.h
View file @
d75c649b
...
@@ -205,8 +205,12 @@ public:
...
@@ -205,8 +205,12 @@ public:
ha_rows
select_limit
,
offset_limit
;
/* LIMIT clause parameters */
ha_rows
select_limit
,
offset_limit
;
/* LIMIT clause parameters */
// Arrays of pointers to top elements of all_fields list
// Arrays of pointers to top elements of all_fields list
Item
**
ref_pointer_array
;
Item
**
ref_pointer_array
;
/*
uint
select_items
;
/* number of items in select_list */
number of items in select_list and HAVING clause used to get number
bigger then can be number of entries that will be added to all item
list during split_sum_func
*/
uint
select_n_having_items
;
uint
cond_count
;
/* number of arguments of and/or/xor in where/having */
uint
cond_count
;
/* number of arguments of and/or/xor in where/having */
enum_parsing_place
parsing_place
;
/* where we are parsing expression */
enum_parsing_place
parsing_place
;
/* where we are parsing expression */
bool
with_sum_func
;
/* sum function indicator */
bool
with_sum_func
;
/* sum function indicator */
...
@@ -360,14 +364,27 @@ public:
...
@@ -360,14 +364,27 @@ public:
bool
braces
;
/* SELECT ... UNION (SELECT ... ) <- this braces */
bool
braces
;
/* SELECT ... UNION (SELECT ... ) <- this braces */
/* TRUE when having fix field called in processing of this SELECT */
/* TRUE when having fix field called in processing of this SELECT */
bool
having_fix_field
;
bool
having_fix_field
;
/*
/*
TRUE for primary st_select_lex structure of simple INSERT/REPLACE
SELECT for SELECT command st_select_lex. Used to privent scaning
item_list of non-SELECT st_select_lex (no sense find to finding
reference in it (all should be in tables, it is dangerouse due
to order of fix_fields calling for non-SELECTs commands (item list
can be not fix_fieldsd)). This value will be assigned for
primary select (sql_yac.yy) and for any subquery and
UNION SELECT (sql_parse.cc mysql_new_select())
INSERT for primary st_select_lex structure of simple INSERT/REPLACE
(used for name resolution, see Item_fiels & Item_ref fix_fields,
(used for name resolution, see Item_fiels & Item_ref fix_fields,
FALSE for INSERT/REPLACE ... SELECT, because it's
FALSE for INSERT/REPLACE ... SELECT, because it's
st_select_lex->table_list will be preprocessed (first table removed)
st_select_lex->table_list will be preprocessed (first table removed)
before passing to handle_select)
before passing to handle_select)
NOMATTER for other
*/
*/
bool
insert_select
;
enum
{
NOMATTER_MODE
,
SELECT_MODE
,
INSERT_MODE
}
resolve_mode
;
void
init_query
();
void
init_query
();
void
init_select
();
void
init_select
();
...
...
sql/sql_parse.cc
View file @
d75c649b
...
@@ -3561,6 +3561,7 @@ mysql_new_select(LEX *lex, bool move_down)
...
@@ -3561,6 +3561,7 @@ mysql_new_select(LEX *lex, bool move_down)
unit
->
link_prev
=
0
;
unit
->
link_prev
=
0
;
unit
->
return_to
=
lex
->
current_select
;
unit
->
return_to
=
lex
->
current_select
;
select_lex
->
include_down
(
unit
);
select_lex
->
include_down
(
unit
);
// TODO: assign resolve_mode for fake subquery after merging with new tree
}
}
else
else
select_lex
->
include_neighbour
(
lex
->
current_select
);
select_lex
->
include_neighbour
(
lex
->
current_select
);
...
@@ -3568,6 +3569,7 @@ mysql_new_select(LEX *lex, bool move_down)
...
@@ -3568,6 +3569,7 @@ mysql_new_select(LEX *lex, bool move_down)
select_lex
->
master_unit
()
->
global_parameters
=
select_lex
;
select_lex
->
master_unit
()
->
global_parameters
=
select_lex
;
select_lex
->
include_global
((
st_select_lex_node
**
)
&
lex
->
all_selects_list
);
select_lex
->
include_global
((
st_select_lex_node
**
)
&
lex
->
all_selects_list
);
lex
->
current_select
=
select_lex
;
lex
->
current_select
=
select_lex
;
select_lex
->
resolve_mode
=
SELECT_LEX
::
SELECT_MODE
;
return
0
;
return
0
;
}
}
...
...
sql/sql_select.cc
View file @
d75c649b
...
@@ -294,7 +294,8 @@ JOIN::prepare(Item ***rref_pointer_array,
...
@@ -294,7 +294,8 @@ JOIN::prepare(Item ***rref_pointer_array,
fields_list
,
fields_list
,
&
all_fields
,
wild_num
)))
||
&
all_fields
,
wild_num
)))
||
setup_ref_array
(
thd
,
rref_pointer_array
,
(
fields_list
.
elements
+
setup_ref_array
(
thd
,
rref_pointer_array
,
(
fields_list
.
elements
+
select_lex
->
select_items
+
select_lex
->
select_n_having_items
+
og_num
))
||
og_num
))
||
setup_fields
(
thd
,
(
*
rref_pointer_array
),
tables_list
,
fields_list
,
1
,
setup_fields
(
thd
,
(
*
rref_pointer_array
),
tables_list
,
fields_list
,
1
,
&
all_fields
,
1
)
||
&
all_fields
,
1
)
||
...
...
sql/sql_union.cc
View file @
d75c649b
...
@@ -159,7 +159,8 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result,
...
@@ -159,7 +159,8 @@ int st_select_lex_unit::prepare(THD *thd, select_result *sel_result,
item_list
=
select_cursor
->
item_list
;
item_list
=
select_cursor
->
item_list
;
select_cursor
->
with_wild
=
0
;
select_cursor
->
with_wild
=
0
;
if
(
setup_ref_array
(
thd
,
&
select_cursor
->
ref_pointer_array
,
if
(
setup_ref_array
(
thd
,
&
select_cursor
->
ref_pointer_array
,
(
item_list
.
elements
+
select_cursor
->
select_items
+
(
item_list
.
elements
+
select_cursor
->
select_n_having_items
+
select_cursor
->
order_list
.
elements
+
select_cursor
->
order_list
.
elements
+
select_cursor
->
group_list
.
elements
))
||
select_cursor
->
group_list
.
elements
))
||
setup_fields
(
thd
,
select_cursor
->
ref_pointer_array
,
first_table
,
setup_fields
(
thd
,
select_cursor
->
ref_pointer_array
,
first_table
,
...
...
sql/sql_yacc.yy
View file @
d75c649b
...
@@ -1910,7 +1910,12 @@ opt_ignore_leaves:
...
@@ -1910,7 +1910,12 @@ opt_ignore_leaves:
select:
select:
select_init { Lex->sql_command=SQLCOM_SELECT; };
select_init
{
LEX *lex= Lex;
lex->sql_command= SQLCOM_SELECT;
lex->select_lex.resolve_mode= SELECT_LEX::SELECT_MODE;
};
/* Need select_init2 for subselects. */
/* Need select_init2 for subselects. */
select_init:
select_init:
...
@@ -3401,7 +3406,7 @@ insert:
...
@@ -3401,7 +3406,7 @@ insert:
lex->sql_command = SQLCOM_INSERT;
lex->sql_command = SQLCOM_INSERT;
/* for subselects */
/* for subselects */
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
lex->lock_option= (using_update_log) ? TL_READ_NO_INSERT : TL_READ;
lex->select_lex.
insert_select= 1
;
lex->select_lex.
resolve_mode= SELECT_LEX::INSERT_MODE
;
} insert_lock_option
} insert_lock_option
opt_ignore insert2
opt_ignore insert2
{
{
...
@@ -3417,7 +3422,7 @@ replace:
...
@@ -3417,7 +3422,7 @@ replace:
LEX *lex=Lex;
LEX *lex=Lex;
lex->sql_command = SQLCOM_REPLACE;
lex->sql_command = SQLCOM_REPLACE;
lex->duplicates= DUP_REPLACE;
lex->duplicates= DUP_REPLACE;
lex->select_lex.
insert_select= 1
;
lex->select_lex.
resolve_mode= SELECT_LEX::INSERT_MODE
;
}
}
replace_lock_option insert2
replace_lock_option insert2
{
{
...
@@ -3486,7 +3491,7 @@ insert_values:
...
@@ -3486,7 +3491,7 @@ insert_values:
it is not simple select => table list will be
it is not simple select => table list will be
preprocessed before passing to handle_select
preprocessed before passing to handle_select
*/
*/
lex->select_lex.
insert_select= 0
;
lex->select_lex.
resolve_mode= SELECT_LEX::NOMATTER_MODE
;
lex->current_select->parsing_place= SELECT_LEX_NODE::SELECT_LIST;
lex->current_select->parsing_place= SELECT_LEX_NODE::SELECT_LIST;
}
}
select_options select_item_list
select_options select_item_list
...
...
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