Cherry-picked from #43410
This commit is contained in:
@ -487,8 +487,16 @@ public class FoldConstantRuleOnBE implements ExpressionPatternRuleFactory {
|
||||
} 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;
|
||||
|
||||
@ -233,7 +233,9 @@ class LiteralTest {
|
||||
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());
|
||||
@ -280,7 +282,9 @@ class LiteralTest {
|
||||
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());
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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(
|
||||
@ -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");
|
||||
"""
|
||||
|
||||
@ -49,7 +52,7 @@ suite("fold_constant_by_be") {
|
||||
qt_sql "explain select sleep(sign(1)*100);"
|
||||
sql 'set query_timeout=12;'
|
||||
qt_sql "select sleep(sign(1)*10);"
|
||||
|
||||
|
||||
explain {
|
||||
sql("verbose select substring('123456', 1, 3)")
|
||||
contains "varchar(3)"
|
||||
|
||||
Reference in New Issue
Block a user