From c7039b920846ba084f8404ba48ea5c8ab2dd3dc5 Mon Sep 17 00:00:00 2001 From: Liu Ming Date: Sat, 3 Feb 2018 10:09:27 +0000 Subject: [PATCH 1/2] [TRAFODION-2951] group_concat on utf8 column with chinese character get messy code --- core/sql/optimizer/SynthType.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/core/sql/optimizer/SynthType.cpp b/core/sql/optimizer/SynthType.cpp index 5494472b56..a0f90424c3 100644 --- a/core/sql/optimizer/SynthType.cpp +++ b/core/sql/optimizer/SynthType.cpp @@ -1762,7 +1762,16 @@ const NAType *AggrGrouping::synthesizeType() // ----------------------------------------------------------------------- const NAType *PivotGroup::synthesizeType() { - return new HEAP SQLVarChar(HEAP, maxLen_, TRUE); + //for Character type, need to consider the charset + //the output charset should be same as input child 0 + const NAType &operand = child(0)->getValueId().getType(); + if(operand.getTypeQualifier() == NA_CHARACTER_TYPE) + { + CharType & origType = (CharType &) operand; + return new HEAP SQLVarChar(HEAP, maxLen_, TRUE, origType.isUpshifted(), FALSE, operand.getCharSet()); + } + else + return new HEAP SQLVarChar(HEAP, maxLen_, TRUE); } // ----------------------------------------------------------------------- From 3c963796066d13a2a55bb6a8fe903d82b5ea49da Mon Sep 17 00:00:00 2001 From: Liu Ming Date: Sat, 3 Feb 2018 11:12:02 +0000 Subject: [PATCH 2/2] add regression test --- core/sql/regress/executor/EXPECTED002.SB | 21 ++++++++++++++++++--- core/sql/regress/executor/TEST002 | 3 +++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/sql/regress/executor/EXPECTED002.SB b/core/sql/regress/executor/EXPECTED002.SB index c6fe1bf2b0..d4742cb10f 100644 --- a/core/sql/regress/executor/EXPECTED002.SB +++ b/core/sql/regress/executor/EXPECTED002.SB @@ -6669,6 +6669,9 @@ A B C E --- 1 row(s) inserted. >>insert into student values('s2', 58); +--- 1 row(s) inserted. +>>insert into student values('学生三',79); + --- 1 row(s) inserted. >> >>SELECT student_name, @@ -6683,8 +6686,9 @@ STUDENT_NAME (EXPR) s1 40-50-60-79-88-100-101 s2 18-58-88-188 s3 40-90-100 +学生三 79 ---- 3 row(s) selected. +--- 4 row(s) selected. >> >>SELECT student_name, +> GROUP_CONCAT(test_score @@ -6698,8 +6702,18 @@ STUDENT_NAME (EXPR) s1 40-50-60-79-88-88-100-101 s2 18-58-88-88-188 s3 40-40-90-100 +学生三 79 ---- 3 row(s) selected. +--- 4 row(s) selected. +>> +>>SELECT GROUP_CONCAT(student_name) from student; + +(EXPR) +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +s1 ,s1 ,s2 ,s3 ,s1 ,s1 ,s1 ,s1 ,s1 ,s1 ,s3 ,s3 ,s3 ,s2 ,s2 ,s2 ,s2 ,学生三 + +--- 1 row(s) selected. >> >>cqd ATTEMPT_ESP_PARALLELISM 'ON'; @@ -6737,8 +6751,9 @@ STUDENT_NAME (EXPR) s1 101-100-88-79-60-50-40 s2 188-88-58-18 s3 100-90-40 +学生三 79 ---- 3 row(s) selected. +--- 4 row(s) selected. >>control query shape cut; --- SQL operation complete. diff --git a/core/sql/regress/executor/TEST002 b/core/sql/regress/executor/TEST002 index 07a4122229..22cec002f7 100755 --- a/core/sql/regress/executor/TEST002 +++ b/core/sql/regress/executor/TEST002 @@ -1137,6 +1137,7 @@ insert into student values('s2', 88); insert into student values('s2', 188); insert into student values('s2', 18); insert into student values('s2', 58); +insert into student values('学生三',79); SELECT student_name, GROUP_CONCAT(DISTINCT test_score @@ -1150,6 +1151,8 @@ SELECT student_name, FROM student GROUP BY student_name order by student_name; +SELECT GROUP_CONCAT(student_name) from student; + cqd ATTEMPT_ESP_PARALLELISM 'ON'; control query shape exchange(cut); prepare s1 from SELECT student_name,