Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

branch-3.0: [fix](fold) fixed an issue with be computing constants #43410 #45691

Merged
merged 1 commit into from
Dec 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -487,8 +487,16 @@ public static List<Literal> getResultExpression(DataType type, PValues resultCon
} else if (type.isStringLikeType()) {
int num = resultContent.getStringValueCount();
for (int i = 0; i < num; ++i) {
Literal literal = new StringLiteral(resultContent.getStringValue(i));
res.add(literal);
// get the raw byte data to avoid character encoding conversion problems
ByteString bytesValues = resultContent.getBytesValue(i);
// use UTF-8 encoding to ensure proper handling of binary data
String stringValue = bytesValues.toStringUtf8();
// handle special NULL value cases
if ("\\N".equalsIgnoreCase(stringValue) && resultContent.hasHasNull()) {
res.add(new NullLiteral(type));
} else {
res.add(new StringLiteral(stringValue));
}
}
} else if (type.isArrayType()) {
ArrayType arrayType = (ArrayType) type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,9 @@ public void testGetResultExpressionStruct() {
PValues.Builder resultContentBuilder = PValues.newBuilder();
for (int i = 0; i < elementsArray.length; i = i + 2) {
childBuilder1.addInt32Value(elementsArray[i]);
childBuilder2.addStringValue("str" + (i + 1));
String strValue = "str" + (i + 1);
childBuilder2.addStringValue(strValue);
childBuilder2.addBytesValue(com.google.protobuf.ByteString.copyFromUtf8(strValue));
}
childBuilder1.setType(childTypeBuilder1.build());
childBuilder2.setType(childTypeBuilder2.build());
Expand Down Expand Up @@ -280,7 +282,9 @@ public void testGetResultExpressionStructArray() {
PValues.Builder resultContentBuilder = PValues.newBuilder();
for (int i = 0; i < elementsArray.length; i = i + 2) {
childBuilder1.addInt32Value(elementsArray[i]);
childBuilder2.addStringValue("str" + (i + 1));
String strValue = "str" + (i + 1);
childBuilder2.addStringValue(strValue);
childBuilder2.addBytesValue(com.google.protobuf.ByteString.copyFromUtf8(strValue));
}
childBuilder1.setType(childTypeBuilder1.build());
childBuilder2.setType(childTypeBuilder2.build());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !sql --
C2BD89103557CCBF7ED97B51860225A0

-- !sql --
C2BD89103557CCBF7ED97B51860225A0

-- !sql_1 --
80000

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ suite("fold_constant_by_be") {
sql 'set enable_fallback_to_original_planner=false'
sql 'set enable_fold_constant_by_be=true'

qt_sql """ select hex(from_base64('wr2JEDVXzL9+2XtRhgIloA==')); """
qt_sql """ select hex(s) from (select from_base64('wr2JEDVXzL9+2XtRhgIloA==') as s) t; """

test {
sql '''
select if(
Expand All @@ -32,8 +35,8 @@ suite("fold_constant_by_be") {
result([['9999-07-31']])
}

sql """
CREATE TABLE IF NOT EXISTS str_tb (k1 VARCHAR(10) NULL, v1 STRING NULL)
sql """
CREATE TABLE IF NOT EXISTS str_tb (k1 VARCHAR(10) NULL, v1 STRING NULL)
UNIQUE KEY(k1) DISTRIBUTED BY HASH(k1) BUCKETS 5 properties("replication_num" = "1");
"""

Expand All @@ -53,7 +56,7 @@ suite("fold_constant_by_be") {

sql 'set query_timeout=12;'
qt_sql "select sleep(sign(1)*5);"

explain {
sql("verbose select substring('123456', 1, 3)")
contains "varchar(3)"
Expand All @@ -71,7 +74,7 @@ suite("fold_constant_by_be") {
col_varchar_1000__undef_signed varchar(1000) null ,
col_varchar_1000__undef_signed_not_null varchar(1000) not null ,
col_varchar_1001__undef_signed varchar(1001) null ,
col_varchar_1001__undef_signed_not_null varchar(1001) not null
col_varchar_1001__undef_signed_not_null varchar(1001) not null
) engine=olap
DUPLICATE KEY(pk, col_char_255__undef_signed, col_char_100__undef_signed)
distributed by hash(pk) buckets 10
Expand Down
Loading