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
dcdda90a
Commit
dcdda90a
authored
Mar 30, 2005
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
456aba6e
4fdb0f48
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1921 additions
and
512 deletions
+1921
-512
mysql-test/r/func_group.result
mysql-test/r/func_group.result
+1
-1
mysql-test/r/metadata.result
mysql-test/r/metadata.result
+26
-1
mysql-test/r/subselect.result
mysql-test/r/subselect.result
+431
-2
mysql-test/r/union.result
mysql-test/r/union.result
+46
-11
mysql-test/t/metadata.test
mysql-test/t/metadata.test
+13
-0
mysql-test/t/subselect.test
mysql-test/t/subselect.test
+186
-2
mysql-test/t/union.test
mysql-test/t/union.test
+25
-0
sql/field.cc
sql/field.cc
+805
-190
sql/field.h
sql/field.h
+13
-35
sql/item.cc
sql/item.cc
+204
-140
sql/item.h
sql/item.h
+16
-16
sql/item_func.h
sql/item_func.h
+2
-1
sql/item_subselect.cc
sql/item_subselect.cc
+132
-83
sql/item_subselect.h
sql/item_subselect.h
+4
-4
sql/sql_derived.cc
sql/sql_derived.cc
+2
-2
sql/sql_lex.h
sql/sql_lex.h
+2
-1
sql/sql_parse.cc
sql/sql_parse.cc
+2
-4
sql/sql_prepare.cc
sql/sql_prepare.cc
+2
-2
sql/sql_select.cc
sql/sql_select.cc
+3
-11
sql/sql_union.cc
sql/sql_union.cc
+6
-6
No files found.
mysql-test/r/func_group.result
View file @
dcdda90a
...
...
@@ -747,7 +747,7 @@ insert into t1 values (now());
create table t2 select f2 from (select max(now()) f2 from t1) a;
show columns from t2;
Field Type Null Key Default Extra
f2 datetime
0000-00-00 00:00:00
f2 datetime
YES NULL
drop table t2;
create table t2 select f2 from (select now() f2 from t1) a;
show columns from t2;
...
...
mysql-test/r/metadata.result
View file @
dcdda90a
...
...
@@ -55,8 +55,33 @@ id data data
2 female no
select t1.id from t1 union select t2.id from t2;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def
test t1 t1 id id 1 3
1 Y 32768 0 63
def
id id 1 4
1 Y 32768 0 63
id
1
2
drop table t1,t2;
create table t1 ( a int, b varchar(30), primary key(a));
insert into t1 values (1,'one');
insert into t1 values (2,'two');
set @arg00=1 ;
select @arg00 FROM t1 where a=1 union distinct select 1 FROM t1 where a=1;
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
def @arg00 @arg00 8 20 1 Y 32768 0 63
@arg00
1
select * from (select @arg00) aaa;
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
def aaa @arg00 @arg00 8 20 1 Y 32768 0 63
@arg00
1
select 1 union select 1;
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
def 1 1 8 20 1 N 32769 0 63
1
1
select * from (select 1 union select 1) aaa;
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
def aaa 1 1 8 20 1 N 32769 0 63
1
1
drop table t1;
mysql-test/r/subselect.result
View file @
dcdda90a
This diff is collapsed.
Click to expand it.
mysql-test/r/union.result
View file @
dcdda90a
...
...
@@ -655,7 +655,7 @@ f
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`f` binary(24) default NULL
`f`
var
binary(24) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT y from t2 UNION select da from t2;
...
...
@@ -666,7 +666,7 @@ y
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`y` binary(10) default NULL
`y`
var
binary(10) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT y from t2 UNION select dt from t2;
...
...
@@ -677,7 +677,7 @@ y
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`y` binary(19) default NULL
`y`
var
binary(19) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT da from t2 UNION select dt from t2;
...
...
@@ -699,7 +699,7 @@ testc
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dt` binary(19) default NULL
`dt`
var
binary(19) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT dt from t2 UNION select sv from t2;
...
...
@@ -710,7 +710,7 @@ testv
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dt` binary(19) default NULL
`dt`
var
binary(19) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT sc from t2 UNION select sv from t2;
...
...
@@ -732,7 +732,7 @@ tetetetetest
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`dt` blob
`dt`
long
blob
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT sv from t2 UNION select b from t2;
...
...
@@ -755,7 +755,7 @@ tetetetetest
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`i` blob
`i`
long
blob
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT sv from t2 UNION select tx from t2;
...
...
@@ -766,7 +766,7 @@ teeeeeeeeeeeest
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`sv` text
`sv`
long
text
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
create table t1 SELECT b from t2 UNION select tx from t2;
...
...
@@ -1069,7 +1069,7 @@ create table t1 as
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`_latin1'test' collate latin1_bin` char(4) character set latin1 collate latin1_bin NOT NULL default ''
`_latin1'test' collate latin1_bin`
var
char(4) character set latin1 collate latin1_bin NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1
select count(*) from t1;
count(*)
...
...
@@ -1082,7 +1082,7 @@ create table t1 as
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`test` char(4) character set latin1 collate latin1_bin NOT NULL default ''
`test`
var
char(4) character set latin1 collate latin1_bin NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1
select count(*) from t1;
count(*)
...
...
@@ -1095,7 +1095,7 @@ create table t1 as
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`test` char(4) character set latin1 collate latin1_bin NOT NULL default ''
`test`
var
char(4) character set latin1 collate latin1_bin NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1
select count(*) from t1;
count(*)
...
...
@@ -1200,3 +1200,38 @@ select concat('value is: ', @val) union select 'some text';
concat('value is: ', @val)
value is: 6
some text
CREATE TABLE t1 (
a ENUM('','','') character set utf8 not null default '',
b ENUM("one", "two") character set utf8,
c ENUM("one", "two")
);
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` enum('','','') character set utf8 NOT NULL default '',
`b` enum('one','two') character set utf8 default NULL,
`c` enum('one','two') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
insert into t1 values ('', 'one', 'one'), ('', 'two', 'one'), ('', NULL, NULL);
create table t2 select NULL union select a from t1;
show columns from t2;
Field Type Null Key Default Extra
NULL enum('','','') YES NULL
drop table t2;
create table t2 select a from t1 union select NULL;
show columns from t2;
Field Type Null Key Default Extra
a enum('','','') YES NULL
drop table t2;
create table t2 select a from t1 union select a from t1;
show columns from t2;
Field Type Null Key Default Extra
a char(1)
drop table t2;
create table t2 select a from t1 union select c from t1;
ERROR HY000: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation 'UNION'
create table t2 select a from t1 union select b from t1;
show columns from t2;
Field Type Null Key Default Extra
a varchar(3) YES NULL
drop table t2, t1;
mysql-test/t/metadata.test
View file @
dcdda90a
...
...
@@ -34,4 +34,17 @@ select t1.id, t1.data, t2.data from t1, t2 where t1.id = t2.id order by t1.id;
select
t1
.
id
from
t1
union
select
t2
.
id
from
t2
;
drop
table
t1
,
t2
;
#
# variables union and derived tables metadata test
#
create
table
t1
(
a
int
,
b
varchar
(
30
),
primary
key
(
a
));
insert
into
t1
values
(
1
,
'one'
);
insert
into
t1
values
(
2
,
'two'
);
set
@
arg00
=
1
;
select
@
arg00
FROM
t1
where
a
=
1
union
distinct
select
1
FROM
t1
where
a
=
1
;
select
*
from
(
select
@
arg00
)
aaa
;
select
1
union
select
1
;
select
*
from
(
select
1
union
select
1
)
aaa
;
drop
table
t1
;
--
disable_metadata
mysql-test/t/subselect.test
View file @
dcdda90a
This diff is collapsed.
Click to expand it.
mysql-test/t/union.test
View file @
dcdda90a
...
...
@@ -717,3 +717,28 @@ drop table t1;
#
set
@
val
:=
6
;
select
concat
(
'value is: '
,
@
val
)
union
select
'some text'
;
#
# Enum merging test
#
CREATE
TABLE
t1
(
a
ENUM
(
''
,
''
,
''
)
character
set
utf8
not
null
default
''
,
b
ENUM
(
"one"
,
"two"
)
character
set
utf8
,
c
ENUM
(
"one"
,
"two"
)
);
show
create
table
t1
;
insert
into
t1
values
(
''
,
'one'
,
'one'
),
(
''
,
'two'
,
'one'
),
(
''
,
NULL
,
NULL
);
create
table
t2
select
NULL
union
select
a
from
t1
;
show
columns
from
t2
;
drop
table
t2
;
create
table
t2
select
a
from
t1
union
select
NULL
;
show
columns
from
t2
;
drop
table
t2
;
create
table
t2
select
a
from
t1
union
select
a
from
t1
;
show
columns
from
t2
;
drop
table
t2
;
--
error
1267
create
table
t2
select
a
from
t1
union
select
c
from
t1
;
create
table
t2
select
a
from
t1
union
select
b
from
t1
;
show
columns
from
t2
;
drop
table
t2
,
t1
;
sql/field.cc
View file @
dcdda90a
This diff is collapsed.
Click to expand it.
sql/field.h
View file @
dcdda90a
...
...
@@ -31,6 +31,17 @@ class Protocol;
struct
st_cache_field
;
void
field_conv
(
Field
*
to
,
Field
*
from
);
inline
uint
get_enum_pack_length
(
int
elements
)
{
return
elements
<
256
?
1
:
2
;
}
inline
uint
get_set_pack_length
(
int
elements
)
{
uint
len
=
(
elements
+
7
)
/
8
;
return
len
>
4
?
8
:
len
;
}
class
Field
{
Field
(
const
Item
&
);
/* Prevent use of these */
...
...
@@ -75,17 +86,6 @@ class Field
GEOM_GEOMETRYCOLLECTION
=
7
};
enum
imagetype
{
itRAW
,
itMBR
};
enum
field_cast_enum
{
FIELD_CAST_STOP
,
FIELD_CAST_DECIMAL
,
FIELD_CAST_TINY
,
FIELD_CAST_SHORT
,
FIELD_CAST_MEDIUM
,
FIELD_CAST_LONG
,
FIELD_CAST_LONGLONG
,
FIELD_CAST_FLOAT
,
FIELD_CAST_DOUBLE
,
FIELD_CAST_NULL
,
FIELD_CAST_TIMESTAMP
,
FIELD_CAST_YEAR
,
FIELD_CAST_DATE
,
FIELD_CAST_NEWDATE
,
FIELD_CAST_TIME
,
FIELD_CAST_DATETIME
,
FIELD_CAST_STRING
,
FIELD_CAST_VARSTRING
,
FIELD_CAST_BLOB
,
FIELD_CAST_GEOM
,
FIELD_CAST_ENUM
,
FIELD_CAST_SET
};
utype
unireg_check
;
uint32
field_length
;
// Length of field
...
...
@@ -119,6 +119,8 @@ class Field
virtual
String
*
val_str
(
String
*
,
String
*
)
=
0
;
virtual
Item_result
result_type
()
const
=
0
;
virtual
Item_result
cmp_type
()
const
{
return
result_type
();
}
static
enum_field_types
field_type_merge
(
enum_field_types
,
enum_field_types
);
static
Item_result
result_merge_type
(
enum_field_types
);
bool
eq
(
Field
*
field
)
{
return
ptr
==
field
->
ptr
&&
null_ptr
==
field
->
null_ptr
;
}
virtual
bool
eq_def
(
Field
*
field
);
virtual
uint32
pack_length
()
const
{
return
(
uint32
)
field_length
;
}
...
...
@@ -290,8 +292,6 @@ class Field
int
cuted_increment
);
void
set_datetime_warning
(
const
uint
level
,
const
uint
code
,
double
nr
,
timestamp_type
ts_type
);
virtual
field_cast_enum
field_cast_type
()
=
0
;
bool
field_cast_compatible
(
field_cast_enum
type
);
/* maximum possible display length */
virtual
uint32
max_length
()
=
0
;
friend
bool
reopen_table
(
THD
*
,
struct
st_table
*
,
bool
);
...
...
@@ -398,7 +398,6 @@ class Field_decimal :public Field_num {
bool
zero_pack
()
const
{
return
0
;
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
field_length
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_DECIMAL
;
}
};
...
...
@@ -430,7 +429,6 @@ class Field_tiny :public Field_num {
uint32
pack_length
()
const
{
return
1
;
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
4
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_TINY
;
}
};
...
...
@@ -467,7 +465,6 @@ class Field_short :public Field_num {
uint32
pack_length
()
const
{
return
2
;
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
6
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_SHORT
;
}
};
...
...
@@ -499,7 +496,6 @@ class Field_medium :public Field_num {
uint32
pack_length
()
const
{
return
3
;
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
8
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_MEDIUM
;
}
};
...
...
@@ -536,7 +532,6 @@ class Field_long :public Field_num {
uint32
pack_length
()
const
{
return
4
;
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
11
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_LONG
;
}
};
...
...
@@ -576,7 +571,6 @@ class Field_longlong :public Field_num {
void
sql_type
(
String
&
str
)
const
;
bool
can_be_compared_as_longlong
()
const
{
return
TRUE
;
}
uint32
max_length
()
{
return
20
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_LONGLONG
;
}
};
#endif
...
...
@@ -611,7 +605,6 @@ class Field_float :public Field_num {
uint32
pack_length
()
const
{
return
sizeof
(
float
);
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
24
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_FLOAT
;
}
};
...
...
@@ -646,7 +639,6 @@ class Field_double :public Field_num {
uint32
pack_length
()
const
{
return
sizeof
(
double
);
}
void
sql_type
(
String
&
str
)
const
;
uint32
max_length
()
{
return
53
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_DOUBLE
;
}
};
...
...
@@ -677,7 +669,6 @@ class Field_null :public Field_str {
void
sql_type
(
String
&
str
)
const
;
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
uint32
max_length
()
{
return
4
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_NULL
;
}
};
...
...
@@ -729,7 +720,6 @@ class Field_timestamp :public Field_str {
}
bool
get_date
(
TIME
*
ltime
,
uint
fuzzydate
);
bool
get_time
(
TIME
*
ltime
);
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_TIMESTAMP
;
}
timestamp_auto_set_type
get_auto_set_type
()
const
;
};
...
...
@@ -753,7 +743,6 @@ class Field_year :public Field_tiny {
bool
send_binary
(
Protocol
*
protocol
);
void
sql_type
(
String
&
str
)
const
;
bool
can_be_compared_as_longlong
()
const
{
return
TRUE
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_YEAR
;
}
};
...
...
@@ -786,7 +775,6 @@ class Field_date :public Field_str {
void
sql_type
(
String
&
str
)
const
;
bool
can_be_compared_as_longlong
()
const
{
return
TRUE
;
}
bool
zero_pack
()
const
{
return
1
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_DATE
;
}
};
class
Field_newdate
:
public
Field_str
{
...
...
@@ -818,7 +806,6 @@ class Field_newdate :public Field_str {
bool
zero_pack
()
const
{
return
1
;
}
bool
get_date
(
TIME
*
ltime
,
uint
fuzzydate
);
bool
get_time
(
TIME
*
ltime
);
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_NEWDATE
;
}
};
...
...
@@ -853,7 +840,6 @@ class Field_time :public Field_str {
void
sql_type
(
String
&
str
)
const
;
bool
can_be_compared_as_longlong
()
const
{
return
TRUE
;
}
bool
zero_pack
()
const
{
return
1
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_TIME
;
}
};
...
...
@@ -891,7 +877,6 @@ class Field_datetime :public Field_str {
bool
zero_pack
()
const
{
return
1
;
}
bool
get_date
(
TIME
*
ltime
,
uint
fuzzydate
);
bool
get_time
(
TIME
*
ltime
);
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_DATETIME
;
}
};
...
...
@@ -937,7 +922,6 @@ class Field_string :public Field_str {
enum_field_types
real_type
()
const
{
return
FIELD_TYPE_STRING
;
}
bool
has_charset
(
void
)
const
{
return
charset
()
==
&
my_charset_bin
?
FALSE
:
TRUE
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_STRING
;
}
};
...
...
@@ -986,7 +970,6 @@ class Field_varstring :public Field_str {
enum_field_types
real_type
()
const
{
return
FIELD_TYPE_VAR_STRING
;
}
bool
has_charset
(
void
)
const
{
return
charset
()
==
&
my_charset_bin
?
FALSE
:
TRUE
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_VARSTRING
;
}
};
...
...
@@ -1081,7 +1064,6 @@ class Field_blob :public Field_str {
uint
size_of
()
const
{
return
sizeof
(
*
this
);
}
bool
has_charset
(
void
)
const
{
return
charset
()
==
&
my_charset_bin
?
FALSE
:
TRUE
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_BLOB
;
}
uint32
max_length
();
};
...
...
@@ -1111,7 +1093,6 @@ class Field_geom :public Field_blob {
void
get_key_image
(
char
*
buff
,
uint
length
,
CHARSET_INFO
*
cs
,
imagetype
type
);
void
set_key_image
(
char
*
buff
,
uint
length
,
CHARSET_INFO
*
cs
);
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_GEOM
;
}
};
#endif
/*HAVE_SPATIAL*/
...
...
@@ -1155,7 +1136,6 @@ class Field_enum :public Field_str {
bool
has_charset
(
void
)
const
{
return
TRUE
;
}
/* enum and set are sorted as integers */
CHARSET_INFO
*
sort_charset
(
void
)
const
{
return
&
my_charset_bin
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_ENUM
;
}
};
...
...
@@ -1181,7 +1161,6 @@ class Field_set :public Field_enum {
void
sql_type
(
String
&
str
)
const
;
enum_field_types
real_type
()
const
{
return
FIELD_TYPE_SET
;
}
bool
has_charset
(
void
)
const
{
return
TRUE
;
}
field_cast_enum
field_cast_type
()
{
return
FIELD_CAST_SET
;
}
};
...
...
@@ -1268,7 +1247,6 @@ int set_field_to_null(Field *field);
int
set_field_to_null_with_conversions
(
Field
*
field
,
bool
no_conversions
);
bool
test_if_int
(
const
char
*
str
,
int
length
,
const
char
*
int_end
,
CHARSET_INFO
*
cs
);
bool
field_types_to_be_kept
(
enum_field_types
field_type
);
/*
The following are for the interface with the .frm file
...
...
sql/item.cc
View file @
dcdda90a
This diff is collapsed.
Click to expand it.
sql/item.h
View file @
dcdda90a
...
...
@@ -1332,32 +1332,32 @@ class Item_cache_row: public Item_cache
/*
Used to store type. name, length of Item for UNIONS & derived table
Item_type_holder used to store type. name, length of Item for UNIONS &
derived tables.
Item_type_holder do not need cleanup() because its time of live limited by
single SP/PS execution.
*/
class
Item_type_holder
:
public
Item
{
protected:
Item_result
item_type
;
Item_result
orig_type
;
Field
*
field_example
;
TYPELIB
*
enum_set_typelib
;
enum_field_types
fld_type
;
void
get_full_info
(
Item
*
item
);
public:
Item_type_holder
(
THD
*
,
Item
*
,
TABLE
*
);
Item_type_holder
(
THD
*
,
Item
*
);
Item_result
result_type
()
const
{
return
item_type
;
}
Item_result
result_type
()
const
;
virtual
enum_field_types
field_type
()
const
{
return
fld_type
;
};
enum
Type
type
()
const
{
return
TYPE_HOLDER
;
}
double
val
();
longlong
val_int
();
String
*
val_str
(
String
*
);
bool
join_types
(
THD
*
thd
,
Item
*
,
TABLE
*
);
Field
*
example
()
{
return
field_example
;
}
static
uint32
real_length
(
Item
*
item
);
void
cleanup
()
{
DBUG_ENTER
(
"Item_type_holder::cleanup"
);
Item
::
cleanup
();
item_type
=
orig_type
;
DBUG_VOID_RETURN
;
}
bool
join_types
(
THD
*
thd
,
Item
*
);
Field
*
make_field_by_type
(
TABLE
*
table
);
static
uint32
display_length
(
Item
*
item
);
static
enum_field_types
get_real_type
(
Item
*
);
};
...
...
sql/item_func.h
View file @
dcdda90a
...
...
@@ -51,7 +51,7 @@ class Item_func :public Item_result_field
SP_CONTAINS_FUNC
,
SP_OVERLAPS_FUNC
,
SP_STARTPOINT
,
SP_ENDPOINT
,
SP_EXTERIORRING
,
SP_POINTN
,
SP_GEOMETRYN
,
SP_INTERIORRINGN
,
NOT_FUNC
,
NOT_ALL_FUNC
,
NOW_FUNC
};
NOT_FUNC
,
NOT_ALL_FUNC
,
NOW_FUNC
,
VAR_VALUE_FUNC
};
enum
optimize_type
{
OPTIMIZE_NONE
,
OPTIMIZE_KEY
,
OPTIMIZE_OP
,
OPTIMIZE_NULL
};
enum
Type
type
()
const
{
return
FUNC_ITEM
;
}
virtual
enum
Functype
functype
()
const
{
return
UNKNOWN_FUNC
;
}
...
...
@@ -981,6 +981,7 @@ class Item_func_get_user_var :public Item_func
select @t1:=1,@t1,@t:="hello",@t from foo where (@t1:= t2.b)
*/
enum_field_types
field_type
()
const
{
return
MYSQL_TYPE_STRING
;
}
enum
Functype
functype
()
const
{
return
VAR_VALUE_FUNC
;
}
const
char
*
func_name
()
const
{
return
"get_user_var"
;
}
bool
const_item
()
const
;
table_map
used_tables
()
const
...
...
sql/item_subselect.cc
View file @
dcdda90a
This diff is collapsed.
Click to expand it.
sql/item_subselect.h
View file @
dcdda90a
...
...
@@ -220,8 +220,8 @@ class Item_in_subselect :public Item_exists_subselect
Item_in_subselect
(
Item
*
left_expr
,
st_select_lex
*
select_lex
);
Item_in_subselect
()
:
Item_exists_subselect
(),
abort_on_null
(
0
),
transformed
(
0
),
upper_item
(
0
)
:
Item_exists_subselect
(),
optimizer
(
0
),
abort_on_null
(
0
),
transformed
(
0
),
upper_item
(
0
)
{}
subs_type
substype
()
{
return
IN_SUBS
;
}
...
...
@@ -232,8 +232,8 @@ class Item_in_subselect :public Item_exists_subselect
was_null
=
0
;
}
trans_res
select_transformer
(
JOIN
*
join
);
trans_res
s
ingle_value_transformer
(
JOIN
*
join
,
Comp_creator
*
func
);
trans_res
s
elect_in_like_transformer
(
JOIN
*
join
,
Comp_creator
*
func
);
trans_res
single_value_transformer
(
JOIN
*
join
,
Comp_creator
*
func
);
trans_res
row_value_transformer
(
JOIN
*
join
);
longlong
val_int
();
double
val
();
...
...
sql/sql_derived.cc
View file @
dcdda90a
...
...
@@ -123,7 +123,7 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
DBUG_RETURN
(
1
);
// out of memory
// st_select_lex_unit::prepare correctly work for single select
if
((
res
=
unit
->
prepare
(
thd
,
derived_result
,
0
)))
if
((
res
=
unit
->
prepare
(
thd
,
derived_result
,
0
,
org_table_list
->
alias
)))
goto
exit
;
...
...
@@ -161,7 +161,7 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
if
(
is_union
)
{
// execute union without clean up
if
(
!
(
res
=
unit
->
prepare
(
thd
,
derived_result
,
SELECT_NO_UNLOCK
)))
if
(
!
(
res
=
unit
->
prepare
(
thd
,
derived_result
,
SELECT_NO_UNLOCK
,
""
)))
res
=
unit
->
exec
();
}
else
...
...
sql/sql_lex.h
View file @
dcdda90a
...
...
@@ -389,7 +389,8 @@ class st_select_lex_unit: public st_select_lex_node {
void
exclude_tree
();
/* UNION methods */
int
prepare
(
THD
*
thd
,
select_result
*
result
,
ulong
additional_options
);
int
prepare
(
THD
*
thd
,
select_result
*
result
,
ulong
additional_options
,
const
char
*
tmp_table_alias
);
int
exec
();
int
cleanup
();
inline
void
unclean
()
{
cleaned
=
0
;
}
...
...
sql/sql_parse.cc
View file @
dcdda90a
...
...
@@ -4539,9 +4539,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
net_printf
(
thd
,
ER_TOO_BIG_SET
,
field_name
);
/* purecov: inspected */
DBUG_RETURN
(
1
);
/* purecov: inspected */
}
new_field
->
pack_length
=
(
interval_list
->
elements
+
7
)
/
8
;
if
(
new_field
->
pack_length
>
4
)
new_field
->
pack_length
=
8
;
new_field
->
pack_length
=
get_set_pack_length
(
interval_list
->
elements
);
List_iterator
<
String
>
it
(
*
interval_list
);
String
*
tmp
;
...
...
@@ -4558,7 +4556,7 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
case
FIELD_TYPE_ENUM
:
{
// Should be safe
new_field
->
pack_length
=
interval_list
->
elements
<
256
?
1
:
2
;
new_field
->
pack_length
=
get_enum_pack_length
(
interval_list
->
elements
);
List_iterator
<
String
>
it
(
*
interval_list
);
String
*
tmp
;
...
...
sql/sql_prepare.cc
View file @
dcdda90a
...
...
@@ -1079,7 +1079,7 @@ static int mysql_test_select(Prepared_statement *stmt,
thd
->
used_tables
=
0
;
// Updated by setup_fields
// JOIN::prepare calls
if
(
unit
->
prepare
(
thd
,
0
,
0
))
if
(
unit
->
prepare
(
thd
,
0
,
0
,
""
))
{
send_error
(
thd
);
goto
err_prep
;
...
...
@@ -1228,7 +1228,7 @@ static int select_like_statement_test(Prepared_statement *stmt,
thd
->
used_tables
=
0
;
// Updated by setup_fields
// JOIN::prepare calls
if
(
lex
->
unit
.
prepare
(
thd
,
0
,
0
))
if
(
lex
->
unit
.
prepare
(
thd
,
0
,
0
,
""
))
{
res
=
thd
->
net
.
report_error
?
-
1
:
1
;
}
...
...
sql/sql_select.cc
View file @
dcdda90a
...
...
@@ -4837,14 +4837,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
copy_func
,
modify_item
,
convert_blob_length
);
case
Item
:
:
TYPE_HOLDER
:
{
Field
*
example
=
((
Item_type_holder
*
)
item
)
->
example
();
if
(
example
)
return
create_tmp_field_from_field
(
thd
,
example
,
item
,
table
,
0
,
convert_blob_length
);
return
create_tmp_field_from_item
(
thd
,
item
,
table
,
copy_func
,
0
,
convert_blob_length
);
}
return
((
Item_type_holder
*
)
item
)
->
make_field_by_type
(
table
);
default:
// Dosen't have to be stored
return
0
;
}
...
...
@@ -5341,8 +5334,6 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
if
(
create_myisam_tmp_table
(
table
,
param
,
select_options
))
goto
err
;
}
/* Set table_name for easier debugging */
table
->
table_name
=
base_name
(
tmpname
);
if
(
!
open_tmp_table
(
table
))
DBUG_RETURN
(
table
);
...
...
@@ -9592,7 +9583,8 @@ int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
unit
->
fake_select_lex
->
select_number
=
UINT_MAX
;
// jost for initialization
unit
->
fake_select_lex
->
type
=
"UNION RESULT"
;
unit
->
fake_select_lex
->
options
|=
SELECT_DESCRIBE
;
if
(
!
(
res
=
unit
->
prepare
(
thd
,
result
,
SELECT_NO_UNLOCK
|
SELECT_DESCRIBE
)))
if
(
!
(
res
=
unit
->
prepare
(
thd
,
result
,
SELECT_NO_UNLOCK
|
SELECT_DESCRIBE
,
""
)))
res
=
unit
->
exec
();
res
|=
unit
->
cleanup
();
}
...
...
sql/sql_union.cc
View file @
dcdda90a
...
...
@@ -29,7 +29,7 @@ int mysql_union(THD *thd, LEX *lex, select_result *result,
{
DBUG_ENTER
(
"mysql_union"
);
int
res
=
0
;
if
(
!
(
res
=
unit
->
prepare
(
thd
,
result
,
SELECT_NO_UNLOCK
)))
if
(
!
(
res
=
unit
->
prepare
(
thd
,
result
,
SELECT_NO_UNLOCK
,
""
)))
res
=
unit
->
exec
();
res
|=
unit
->
cleanup
();
DBUG_RETURN
(
res
);
...
...
@@ -142,7 +142,8 @@ st_select_lex_unit::init_prepare_fake_select_lex(THD *thd)
int
st_select_lex_unit
::
prepare
(
THD
*
thd_arg
,
select_result
*
sel_result
,
ulong
additional_options
)
ulong
additional_options
,
const
char
*
tmp_table_alias
)
{
SELECT_LEX
*
lex_select_save
=
thd_arg
->
lex
->
current_select
;
SELECT_LEX
*
sl
,
*
first_select
;
...
...
@@ -252,7 +253,7 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
while
((
item_tmp
=
it
++
))
{
/* Error's in 'new' will be detected after loop */
types
.
push_back
(
new
Item_type_holder
(
thd_arg
,
item_tmp
,
empty_table
));
types
.
push_back
(
new
Item_type_holder
(
thd_arg
,
item_tmp
));
}
if
(
thd_arg
->
is_fatal_error
)
...
...
@@ -271,8 +272,7 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
Item
*
type
,
*
item_tmp
;
while
((
type
=
tp
++
,
item_tmp
=
it
++
))
{
if
(((
Item_type_holder
*
)
type
)
->
join_types
(
thd_arg
,
item_tmp
,
empty_table
))
if
(((
Item_type_holder
*
)
type
)
->
join_types
(
thd_arg
,
item_tmp
))
DBUG_RETURN
(
-
1
);
}
}
...
...
@@ -304,7 +304,7 @@ int st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
(
first_select_in_union
()
->
options
|
thd_arg
->
options
|
TMP_TABLE_ALL_COLUMNS
),
HA_POS_ERROR
,
(
char
*
)
""
)))
HA_POS_ERROR
,
(
char
*
)
tmp_table_alias
)))
goto
err
;
table
->
file
->
extra
(
HA_EXTRA_WRITE_CACHE
);
table
->
file
->
extra
(
HA_EXTRA_IGNORE_DUP_KEY
);
...
...
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