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
2bbee0e1
Commit
2bbee0e1
authored
Jul 31, 2018
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
parent
28ff7e89
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
178 additions
and
49 deletions
+178
-49
mysql-test/main/subselect.result
mysql-test/main/subselect.result
+15
-0
mysql-test/main/subselect.test
mysql-test/main/subselect.test
+20
-0
mysql-test/main/subselect_no_exists_to_in.result
mysql-test/main/subselect_no_exists_to_in.result
+15
-0
mysql-test/main/subselect_no_mat.result
mysql-test/main/subselect_no_mat.result
+15
-0
mysql-test/main/subselect_no_opts.result
mysql-test/main/subselect_no_opts.result
+15
-0
mysql-test/main/subselect_no_scache.result
mysql-test/main/subselect_no_scache.result
+15
-0
mysql-test/main/subselect_no_semijoin.result
mysql-test/main/subselect_no_semijoin.result
+15
-0
sql/item.cc
sql/item.cc
+1
-8
sql/item.h
sql/item.h
+1
-33
sql/item_func.cc
sql/item_func.cc
+1
-1
sql/item_strfunc.h
sql/item_strfunc.h
+0
-5
sql/item_subselect.h
sql/item_subselect.h
+1
-2
sql/sql_type.cc
sql/sql_type.cc
+55
-0
sql/sql_type.h
sql/sql_type.h
+9
-0
No files found.
mysql-test/main/subselect.result
View file @
2bbee0e1
...
...
@@ -7281,3 +7281,18 @@ pk i c pk i c
1 10 foo 1 10 foo
DROP TABLE t;
# End of 10.2 tests
#
# Start of 10.4 tests
#
#
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
#
SELECT ROW(1,2) = EXISTS (SELECT 1);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = 1 IN (SELECT 1 UNION SELECT 2);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = (1 = ANY (SELECT 1 UNION SELECT 2));
ERROR HY000: Illegal parameter data types row and boolean for operation '='
#
# End of 10.4 tests
#
mysql-test/main/subselect.test
View file @
2bbee0e1
...
...
@@ -6145,3 +6145,23 @@ SELECT * FROM t t1 RIGHT JOIN t t2 ON (t2.pk = t1.pk)
DROP
TABLE
t
;
--
echo
# End of 10.2 tests
--
echo
#
--
echo
# Start of 10.4 tests
--
echo
#
--
echo
#
--
echo
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
--
echo
#
--
error
ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
SELECT
ROW
(
1
,
2
)
=
EXISTS
(
SELECT
1
);
--
error
ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
SELECT
ROW
(
1
,
2
)
=
1
IN
(
SELECT
1
UNION
SELECT
2
);
--
error
ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION
SELECT
ROW
(
1
,
2
)
=
(
1
=
ANY
(
SELECT
1
UNION
SELECT
2
));
--
echo
#
--
echo
# End of 10.4 tests
--
echo
#
mysql-test/main/subselect_no_exists_to_in.result
View file @
2bbee0e1
...
...
@@ -7281,6 +7281,21 @@ pk i c pk i c
1 10 foo 1 10 foo
DROP TABLE t;
# End of 10.2 tests
#
# Start of 10.4 tests
#
#
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
#
SELECT ROW(1,2) = EXISTS (SELECT 1);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = 1 IN (SELECT 1 UNION SELECT 2);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = (1 = ANY (SELECT 1 UNION SELECT 2));
ERROR HY000: Illegal parameter data types row and boolean for operation '='
#
# End of 10.4 tests
#
set optimizer_switch=default;
select @@optimizer_switch like '%exists_to_in=off%';
@@optimizer_switch like '%exists_to_in=off%'
...
...
mysql-test/main/subselect_no_mat.result
View file @
2bbee0e1
...
...
@@ -7274,6 +7274,21 @@ pk i c pk i c
1 10 foo 1 10 foo
DROP TABLE t;
# End of 10.2 tests
#
# Start of 10.4 tests
#
#
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
#
SELECT ROW(1,2) = EXISTS (SELECT 1);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = 1 IN (SELECT 1 UNION SELECT 2);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = (1 = ANY (SELECT 1 UNION SELECT 2));
ERROR HY000: Illegal parameter data types row and boolean for operation '='
#
# End of 10.4 tests
#
set optimizer_switch=default;
select @@optimizer_switch like '%materialization=on%';
@@optimizer_switch like '%materialization=on%'
...
...
mysql-test/main/subselect_no_opts.result
View file @
2bbee0e1
...
...
@@ -7272,4 +7272,19 @@ pk i c pk i c
1 10 foo 1 10 foo
DROP TABLE t;
# End of 10.2 tests
#
# Start of 10.4 tests
#
#
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
#
SELECT ROW(1,2) = EXISTS (SELECT 1);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = 1 IN (SELECT 1 UNION SELECT 2);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = (1 = ANY (SELECT 1 UNION SELECT 2));
ERROR HY000: Illegal parameter data types row and boolean for operation '='
#
# End of 10.4 tests
#
set @optimizer_switch_for_subselect_test=null;
mysql-test/main/subselect_no_scache.result
View file @
2bbee0e1
...
...
@@ -7287,6 +7287,21 @@ pk i c pk i c
1 10 foo 1 10 foo
DROP TABLE t;
# End of 10.2 tests
#
# Start of 10.4 tests
#
#
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
#
SELECT ROW(1,2) = EXISTS (SELECT 1);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = 1 IN (SELECT 1 UNION SELECT 2);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = (1 = ANY (SELECT 1 UNION SELECT 2));
ERROR HY000: Illegal parameter data types row and boolean for operation '='
#
# End of 10.4 tests
#
set optimizer_switch=default;
select @@optimizer_switch like '%subquery_cache=on%';
@@optimizer_switch like '%subquery_cache=on%'
...
...
mysql-test/main/subselect_no_semijoin.result
View file @
2bbee0e1
...
...
@@ -7272,5 +7272,20 @@ pk i c pk i c
1 10 foo 1 10 foo
DROP TABLE t;
# End of 10.2 tests
#
# Start of 10.4 tests
#
#
# MDEV-16861 Split Item::update_null_value() into a new virtual method in Type_handler
#
SELECT ROW(1,2) = EXISTS (SELECT 1);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = 1 IN (SELECT 1 UNION SELECT 2);
ERROR HY000: Illegal parameter data types row and boolean for operation '='
SELECT ROW(1,2) = (1 = ANY (SELECT 1 UNION SELECT 2));
ERROR HY000: Illegal parameter data types row and boolean for operation '='
#
# End of 10.4 tests
#
set @optimizer_switch_for_subselect_test=null;
set @join_cache_level_for_subselect_test=NULL;
sql/item.cc
View file @
2bbee0e1
...
...
@@ -276,13 +276,6 @@ bool Item::get_temporal_with_sql_mode(MYSQL_TIME *ltime)
}
bool
Item
::
is_null_from_temporal
()
{
MYSQL_TIME
ltime
;
return
get_temporal_with_sql_mode
(
&
ltime
);
}
longlong
Item
::
val_int_from_str
(
int
*
error
)
{
char
buff
[
MAX_FIELD_WIDTH
];
...
...
@@ -7488,7 +7481,7 @@ void Item_field::update_null_value()
no_errors
=
thd
->
no_errors
;
thd
->
no_errors
=
1
;
Item
::
update_null_value
(
);
type_handler
()
->
Item_update_null_value
(
this
);
thd
->
no_errors
=
no_errors
;
}
...
...
sql/item.h
View file @
2bbee0e1
...
...
@@ -1398,8 +1398,6 @@ class Item: public Value_source,
// Get TIME, DATE or DATETIME using proper sql_mode flags for the field type
bool
get_temporal_with_sql_mode
(
MYSQL_TIME
*
ltime
);
// Check NULL value for a TIME, DATE or DATETIME expression
bool
is_null_from_temporal
();
int
save_time_in_field
(
Field
*
field
,
bool
no_conversions
);
int
save_date_in_field
(
Field
*
field
,
bool
no_conversions
);
...
...
@@ -1699,35 +1697,7 @@ class Item: public Value_source,
*/
virtual
void
update_null_value
()
{
switch
(
cmp_type
())
{
case
INT_RESULT
:
(
void
)
val_int
();
break
;
case
REAL_RESULT
:
(
void
)
val_real
();
break
;
case
DECIMAL_RESULT
:
{
my_decimal
tmp
;
(
void
)
val_decimal
(
&
tmp
);
}
break
;
case
TIME_RESULT
:
{
MYSQL_TIME
ltime
;
(
void
)
get_temporal_with_sql_mode
(
&
ltime
);
}
break
;
case
STRING_RESULT
:
{
StringBuffer
<
MAX_FIELD_WIDTH
>
tmp
;
(
void
)
val_str
(
&
tmp
);
}
break
;
case
ROW_RESULT
:
DBUG_ASSERT
(
0
);
null_value
=
true
;
}
return
type_handler
()
->
Item_update_null_value
(
this
);
}
/*
...
...
@@ -4653,8 +4623,6 @@ class Item_temporal_literal :public Item_literal
}
const
MYSQL_TIME
*
const_ptr_mysql_time
()
const
{
return
&
cached_time
;
}
bool
is_null
()
{
return
is_null_from_temporal
();
}
bool
get_date_with_sql_mode
(
MYSQL_TIME
*
to
);
String
*
val_str
(
String
*
str
)
{
return
val_string_from_date
(
str
);
}
...
...
sql/item_func.cc
View file @
2bbee0e1
...
...
@@ -5632,7 +5632,7 @@ void Item_func_get_system_var::update_null_value()
THD
*
thd
=
current_thd
;
int
save_no_errors
=
thd
->
no_errors
;
thd
->
no_errors
=
TRUE
;
Item
::
update_null_value
(
);
type_handler
()
->
Item_update_null_value
(
this
);
thd
->
no_errors
=
save_no_errors
;
}
...
...
sql/item_strfunc.h
View file @
2bbee0e1
...
...
@@ -67,11 +67,6 @@ class Item_str_func :public Item_func
const
Type_handler
*
type_handler
()
const
{
return
string_type_handler
();
}
void
left_right_max_length
();
bool
fix_fields
(
THD
*
thd
,
Item
**
ref
);
void
update_null_value
()
{
StringBuffer
<
MAX_FIELD_WIDTH
>
tmp
;
(
void
)
val_str
(
&
tmp
);
}
};
...
...
sql/item_subselect.h
View file @
2bbee0e1
...
...
@@ -399,7 +399,7 @@ class Item_exists_subselect :public Item_subselect
}
void
no_rows_in_result
();
const
Type_handler
*
type_handler
()
const
{
return
&
type_handler_
longlong
;
}
const
Type_handler
*
type_handler
()
const
{
return
&
type_handler_
bool
;
}
longlong
val_int
();
double
val_real
();
String
*
val_str
(
String
*
);
...
...
@@ -627,7 +627,6 @@ class Item_in_subselect :public Item_exists_subselect
double
val_real
();
String
*
val_str
(
String
*
);
my_decimal
*
val_decimal
(
my_decimal
*
);
void
update_null_value
()
{
(
void
)
val_bool
();
}
bool
val_bool
();
bool
test_limit
(
st_select_lex_unit
*
unit
);
void
print
(
String
*
str
,
enum_query_type
query_type
);
...
...
sql/sql_type.cc
View file @
2bbee0e1
...
...
@@ -2617,6 +2617,61 @@ uint32 Type_handler_general_purpose_int::max_display_length(const Item *item)
}
/*************************************************************************/
void
Type_handler_row
::
Item_update_null_value
(
Item
*
item
)
const
{
DBUG_ASSERT
(
0
);
item
->
null_value
=
true
;
}
void
Type_handler_time_common
::
Item_update_null_value
(
Item
*
item
)
const
{
MYSQL_TIME
ltime
;
(
void
)
item
->
get_date
(
&
ltime
,
TIME_TIME_ONLY
);
}
void
Type_handler_temporal_with_date
::
Item_update_null_value
(
Item
*
item
)
const
{
MYSQL_TIME
ltime
;
(
void
)
item
->
get_date
(
&
ltime
,
sql_mode_for_dates
(
current_thd
));
}
void
Type_handler_string_result
::
Item_update_null_value
(
Item
*
item
)
const
{
StringBuffer
<
MAX_FIELD_WIDTH
>
tmp
;
(
void
)
item
->
val_str
(
&
tmp
);
}
void
Type_handler_real_result
::
Item_update_null_value
(
Item
*
item
)
const
{
(
void
)
item
->
val_real
();
}
void
Type_handler_decimal_result
::
Item_update_null_value
(
Item
*
item
)
const
{
my_decimal
tmp
;
(
void
)
item
->
val_decimal
(
&
tmp
);
}
void
Type_handler_int_result
::
Item_update_null_value
(
Item
*
item
)
const
{
(
void
)
item
->
val_int
();
}
void
Type_handler_bool
::
Item_update_null_value
(
Item
*
item
)
const
{
(
void
)
item
->
val_bool
();
}
/*************************************************************************/
int
Type_handler_time_common
::
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
...
...
sql/sql_type.h
View file @
2bbee0e1
...
...
@@ -1420,6 +1420,7 @@ class Type_handler
virtual
uint32
max_display_length
(
const
Item
*
item
)
const
=
0
;
virtual
uint32
calc_pack_length
(
uint32
length
)
const
=
0
;
virtual
void
Item_update_null_value
(
Item
*
item
)
const
=
0
;
virtual
bool
Item_save_in_value
(
Item
*
item
,
st_value
*
value
)
const
=
0
;
virtual
void
Item_param_setup_conversion
(
THD
*
thd
,
Item_param
*
)
const
{}
virtual
void
Item_param_set_param_func
(
Item_param
*
param
,
...
...
@@ -1789,6 +1790,7 @@ class Type_handler_row: public Type_handler
DBUG_ASSERT
(
0
);
return
true
;
}
void
Item_update_null_value
(
Item
*
item
)
const
;
int
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
bool
no_conversions
)
const
{
DBUG_ASSERT
(
0
);
...
...
@@ -2041,6 +2043,7 @@ class Type_handler_real_result: public Type_handler_numeric
Item_param
*
param
,
const
Type_all_attributes
*
attr
,
const
st_value
*
value
)
const
;
void
Item_update_null_value
(
Item
*
item
)
const
;
int
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
bool
no_conversions
)
const
;
Item
*
make_const_item_for_comparison
(
THD
*
,
Item
*
src
,
const
Item
*
cmp
)
const
;
Item_cache
*
Item_get_cache
(
THD
*
thd
,
const
Item
*
item
)
const
;
...
...
@@ -2129,6 +2132,7 @@ class Type_handler_decimal_result: public Type_handler_numeric
{
return
Item_send_str
(
item
,
protocol
,
buf
);
}
void
Item_update_null_value
(
Item
*
item
)
const
;
int
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
bool
no_conversions
)
const
;
Item
*
make_const_item_for_comparison
(
THD
*
,
Item
*
src
,
const
Item
*
cmp
)
const
;
Item_cache
*
Item_get_cache
(
THD
*
thd
,
const
Item
*
item
)
const
;
...
...
@@ -2330,6 +2334,7 @@ class Type_handler_int_result: public Type_handler_numeric
Item_param
*
param
,
const
Type_all_attributes
*
attr
,
const
st_value
*
value
)
const
;
void
Item_update_null_value
(
Item
*
item
)
const
;
int
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
bool
no_conversions
)
const
;
Item
*
make_const_item_for_comparison
(
THD
*
,
Item
*
src
,
const
Item
*
cmp
)
const
;
Item_cache
*
Item_get_cache
(
THD
*
thd
,
const
Item
*
item
)
const
;
...
...
@@ -2503,6 +2508,7 @@ class Type_handler_string_result: public Type_handler
return
Item_temporal_precision
(
item
,
false
);
}
uint
Item_decimal_precision
(
const
Item
*
item
)
const
;
void
Item_update_null_value
(
Item
*
item
)
const
;
bool
Item_save_in_value
(
Item
*
item
,
st_value
*
value
)
const
;
void
Item_param_setup_conversion
(
THD
*
thd
,
Item_param
*
)
const
;
void
Item_param_set_param_func
(
Item_param
*
param
,
...
...
@@ -2740,6 +2746,7 @@ class Type_handler_bool: public Type_handler_long
public:
const
Name
name
()
const
{
return
m_name_bool
;
}
bool
is_bool_type
()
const
{
return
true
;
}
void
Item_update_null_value
(
Item
*
item
)
const
;
bool
Item_sum_hybrid_fix_length_and_dec
(
Item_sum_hybrid
*
)
const
;
};
...
...
@@ -3038,6 +3045,7 @@ class Type_handler_time_common: public Type_handler_temporal_result
{
return
Item_send_time
(
item
,
protocol
,
buf
);
}
void
Item_update_null_value
(
Item
*
item
)
const
;
int
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
bool
no_conversions
)
const
;
String
*
print_item_value
(
THD
*
thd
,
Item
*
item
,
String
*
str
)
const
;
Item_cache
*
Item_get_cache
(
THD
*
thd
,
const
Item
*
item
)
const
;
...
...
@@ -3140,6 +3148,7 @@ class Type_handler_temporal_with_date: public Type_handler_temporal_result
{
return
Item_send_date
(
item
,
protocol
,
buf
);
}
void
Item_update_null_value
(
Item
*
item
)
const
;
int
Item_save_in_field
(
Item
*
item
,
Field
*
field
,
bool
no_conversions
)
const
;
Item
*
make_const_item_for_comparison
(
THD
*
,
Item
*
src
,
const
Item
*
cmp
)
const
;
bool
set_comparator_func
(
Arg_comparator
*
cmp
)
const
;
...
...
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