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
baadbe96
Commit
baadbe96
authored
Apr 23, 2019
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-9234 Add Type_handler::union_element_finalize()
parent
a765b19e
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
5 deletions
+27
-5
sql/sql_type.cc
sql/sql_type.cc
+13
-0
sql/sql_type.h
sql/sql_type.h
+9
-0
sql/sql_union.cc
sql/sql_union.cc
+5
-5
No files found.
sql/sql_type.cc
View file @
baadbe96
...
...
@@ -7890,6 +7890,19 @@ bool Type_handler_string_result::Item_eq_value(THD *thd,
}
/***************************************************************************/
bool
Type_handler_string_result
::
union_element_finalize
(
const
Item
*
item
)
const
{
if
(
item
->
collation
.
derivation
==
DERIVATION_NONE
)
{
my_error
(
ER_CANT_AGGREGATE_NCOLLATIONS
,
MYF
(
0
),
"UNION"
);
return
true
;
}
return
false
;
}
/***************************************************************************/
void
Type_handler_var_string
::
...
...
sql/sql_type.h
View file @
baadbe96
...
...
@@ -3356,6 +3356,14 @@ class Type_handler
virtual
Field
*
make_conversion_table_field
(
TABLE
*
TABLE
,
uint
metadata
,
const
Field
*
target
)
const
=
0
;
/*
Performs the final data type validation for a UNION element,
after the regular "aggregation for result" was done.
*/
virtual
bool
union_element_finalize
(
const
Item
*
item
)
const
{
return
false
;
}
// Automatic upgrade, e.g. for ALTER TABLE t1 FORCE
virtual
void
Column_definition_implicit_upgrade
(
Column_definition
*
c
)
const
{
}
...
...
@@ -4580,6 +4588,7 @@ class Type_handler_string_result: public Type_handler
void
sortlength
(
THD
*
thd
,
const
Type_std_attributes
*
item
,
SORT_FIELD_ATTR
*
attr
)
const
;
bool
union_element_finalize
(
const
Item
*
item
)
const
;
bool
Column_definition_prepare_stage1
(
THD
*
thd
,
MEM_ROOT
*
mem_root
,
Column_definition
*
c
,
...
...
sql/sql_union.cc
View file @
baadbe96
...
...
@@ -1085,13 +1085,13 @@ bool st_select_lex_unit::prepare(TABLE_LIST *derived_arg,
while
((
type
=
tp
++
))
{
if
(
type
->
cmp_type
()
==
STRING_RESULT
&&
type
->
collation
.
derivation
==
DERIVATION_NONE
)
{
my_error
(
ER_CANT_AGGREGATE_NCOLLATIONS
,
MYF
(
0
),
"UNION"
);
/*
Test if the aggregated data type is OK for a UNION element.
E.g. in case of string data, DERIVATION_NONE is not allowed.
*/
if
(
type
->
type_handler
()
->
union_element_finalize
(
type
))
goto
err
;
}
}
/*
Disable the usage of fulltext searches in the last union branch.
...
...
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