summaryrefslogtreecommitdiff
path: root/sql/sql_parse.cc
diff options
context:
space:
mode:
authorDebarun Banerjee <debarun.banerjee@oracle.com>2015-07-08 10:00:53 +0530
committerDebarun Banerjee <debarun.banerjee@oracle.com>2015-07-08 10:00:53 +0530
commit359f102ad157adaacc904a1c81f5ddcb9ce3662b (patch)
tree74e2bdd343b94f54fa4e5ca3297bfb1764d42b56 /sql/sql_parse.cc
parent2ac01ca6606a300dc7c043affccb9f850284a5e7 (diff)
downloadmariadb-git-359f102ad157adaacc904a1c81f5ddcb9ce3662b.tar.gz
BUG#16613004 PARTITIONING DDL, CRASH IN FIELD_VARSTRING::CMP_MAX
Problem : --------- The specific issue reported in this bug is with range/list column value that is allocated and initialized by evaluating partition expression(item tree) during execution. After evaluation the range list value is marked fixed [part_column_list_val]. During next execution, we don't re-evaluate the expression and use the old value since it is marked fixed. Solution : ---------- One way to solve the issue is to mark all column values as not fixed during clone so that the expression is always re-evaluated once we attempt partition_info::fix_column_value_functions() after cloning the part_info object during execution of DDL on partitioned table. Reviewed-by: Jimmy Yang <Jimmy.Yang@oracle.com> Reviewed-by: Mattias Jonsson <mattias.jonsson@oracle.com> RB: 9424
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r--sql/sql_parse.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index f52f56447f4..e1fc26775a4 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -2428,7 +2428,7 @@ case SQLCOM_PREPARE:
#ifdef WITH_PARTITION_STORAGE_ENGINE
{
partition_info *part_info= thd->lex->part_info;
- if (part_info && !(part_info= thd->lex->part_info->get_clone()))
+ if (part_info && !(part_info= thd->lex->part_info->get_clone(true)))
{
res= -1;
goto end_with_restore_list;