mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge 10.4 into 10.5
This commit is contained in:
@ -20,6 +20,7 @@
|
||||
#include "sql_const.h"
|
||||
#include "sql_class.h"
|
||||
#include "sql_time.h"
|
||||
#include "sql_string.h"
|
||||
#include "item.h"
|
||||
#include "log.h"
|
||||
#include "tztime.h"
|
||||
@ -7077,7 +7078,8 @@ uint Type_handler_timestamp_common::Item_decimal_precision(const Item *item) con
|
||||
|
||||
bool Type_handler_real_result::
|
||||
subquery_type_allows_materialization(const Item *inner,
|
||||
const Item *outer) const
|
||||
const Item *outer,
|
||||
bool is_in_predicate) const
|
||||
{
|
||||
DBUG_ASSERT(inner->cmp_type() == REAL_RESULT);
|
||||
return outer->cmp_type() == REAL_RESULT;
|
||||
@ -7086,7 +7088,8 @@ bool Type_handler_real_result::
|
||||
|
||||
bool Type_handler_int_result::
|
||||
subquery_type_allows_materialization(const Item *inner,
|
||||
const Item *outer) const
|
||||
const Item *outer,
|
||||
bool is_in_predicate) const
|
||||
{
|
||||
DBUG_ASSERT(inner->cmp_type() == INT_RESULT);
|
||||
return outer->cmp_type() == INT_RESULT;
|
||||
@ -7095,7 +7098,8 @@ bool Type_handler_int_result::
|
||||
|
||||
bool Type_handler_decimal_result::
|
||||
subquery_type_allows_materialization(const Item *inner,
|
||||
const Item *outer) const
|
||||
const Item *outer,
|
||||
bool is_in_predicate) const
|
||||
{
|
||||
DBUG_ASSERT(inner->cmp_type() == DECIMAL_RESULT);
|
||||
return outer->cmp_type() == DECIMAL_RESULT;
|
||||
@ -7104,23 +7108,37 @@ bool Type_handler_decimal_result::
|
||||
|
||||
bool Type_handler_string_result::
|
||||
subquery_type_allows_materialization(const Item *inner,
|
||||
const Item *outer) const
|
||||
const Item *outer,
|
||||
bool is_in_predicate) const
|
||||
{
|
||||
DBUG_ASSERT(inner->cmp_type() == STRING_RESULT);
|
||||
return outer->cmp_type() == STRING_RESULT &&
|
||||
outer->collation.collation == inner->collation.collation &&
|
||||
/*
|
||||
Materialization also is unable to work when create_tmp_table() will
|
||||
create a blob column because item->max_length is too big.
|
||||
The following test is copied from varstring_type_handler().
|
||||
*/
|
||||
!inner->too_big_for_varchar();
|
||||
if (outer->cmp_type() == STRING_RESULT &&
|
||||
/*
|
||||
Materialization also is unable to work when create_tmp_table() will
|
||||
create a blob column because item->max_length is too big.
|
||||
The following test is copied from varstring_type_handler().
|
||||
*/
|
||||
!inner->too_big_for_varchar())
|
||||
{
|
||||
if (outer->collation.collation == inner->collation.collation)
|
||||
return true;
|
||||
if (is_in_predicate)
|
||||
{
|
||||
Charset inner_col(inner->collation.collation);
|
||||
if (inner_col.encoding_allows_reinterpret_as(outer->
|
||||
collation.collation) &&
|
||||
inner_col.eq_collation_specific_names(outer->collation.collation))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Type_handler_temporal_result::
|
||||
subquery_type_allows_materialization(const Item *inner,
|
||||
const Item *outer) const
|
||||
const Item *outer,
|
||||
bool is_in_predicate) const
|
||||
{
|
||||
DBUG_ASSERT(inner->cmp_type() == TIME_RESULT);
|
||||
return mysql_timestamp_type() ==
|
||||
|
Reference in New Issue
Block a user