[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:
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user