[enhancement](Nereids) add mode no_backslash_escapes (#25822)

add mode [no_backslash_escapes](https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html)
This commit is contained in:
谢健
2023-10-27 13:43:32 +08:00
committed by GitHub
parent ae8e6fbe59
commit deb1ad8264
5 changed files with 70 additions and 3 deletions

View File

@ -1380,7 +1380,7 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
return ParserUtils.withOrigin(ctx, () -> {
Expression left = getExpression(ctx.left);
Expression right = getExpression(ctx.right);
if (ConnectContext.get().getSessionVariable().getSqlMode() == SqlModeHelper.MODE_PIPES_AS_CONCAT) {
if (SqlModeHelper.hasPipeAsConcat()) {
return new UnboundFunction("concat", Lists.newArrayList(left, right));
} else {
return new Or(left, right);
@ -1719,11 +1719,12 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
@Override
public Literal visitStringLiteral(StringLiteralContext ctx) {
// TODO: add unescapeSQLString.
String txt = ctx.STRING_LITERAL().getText();
String s = txt.substring(1, txt.length() - 1);
s = s.replace("''", "'").replace("\"\"", "\"");
s = LogicalPlanBuilderAssistant.escapeBackSlash(s);
if (!SqlModeHelper.hasNoBackSlashEscapes()) {
s = LogicalPlanBuilderAssistant.escapeBackSlash(s);
}
return new VarcharLiteral(s);
}

View File

@ -209,4 +209,14 @@ public class SqlModeHelper {
return combineModeSet;
}
public static boolean hasNoBackSlashEscapes() {
return ((ConnectContext.get().getSessionVariable().getSqlMode() & MODE_ALLOWED_MASK)
& MODE_NO_BACKSLASH_ESCAPES) != 0;
}
public static boolean hasPipeAsConcat() {
return ((ConnectContext.get().getSessionVariable().getSqlMode() & MODE_ALLOWED_MASK)
& MODE_PIPES_AS_CONCAT) != 0;
}
}