This is an automated email from the ASF dual-hosted git repository.
sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new b7456bf0f6e Fix update where cipher column is null not rewrite.
(#23054)
b7456bf0f6e is described below
commit b7456bf0f6e5e1eee22ced3e17421f4db2a7c325
Author: Chuxin Chen <[email protected]>
AuthorDate: Fri Dec 23 14:24:13 2022 +0800
Fix update where cipher column is null not rewrite. (#23054)
---
.../statement/impl/MySQLStatementSQLVisitor.java | 5 +-
.../impl/OpenGaussStatementSQLVisitor.java | 53 +++++++++++++++-------
.../statement/impl/OracleStatementSQLVisitor.java | 4 +-
.../impl/PostgreSQLStatementSQLVisitor.java | 53 +++++++++++++++-------
.../statement/impl/SQL92StatementSQLVisitor.java | 4 +-
.../impl/SQLServerStatementSQLVisitor.java | 4 +-
.../it/parser/src/main/resources/case/dml/call.xml | 4 +-
.../main/resources/case/dml/select-expression.xml | 8 ++--
.../src/main/resources/case/dml/select-with.xml | 4 +-
.../parser/src/main/resources/case/dml/select.xml | 4 +-
.../case/query-with-cipher/dml/update/update.xml | 7 ++-
11 files changed, 99 insertions(+), 51 deletions(-)
diff --git
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
index 850064d70ae..dbab96ed44b 100644
---
a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
+++
b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
@@ -423,6 +423,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
@Override
public final ASTNode visitBooleanPrimary(final BooleanPrimaryContext ctx) {
if (null != ctx.IS()) {
+ // TODO optimize operatorToken
String rightText = "";
if (null != ctx.NOT()) {
rightText =
rightText.concat(ctx.start.getInputStream().getText(new
Interval(ctx.NOT().getSymbol().getStartIndex(),
@@ -438,9 +439,9 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
if (null != ctx.FALSE()) {
operatorToken = ctx.FALSE().getSymbol();
}
- int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 1 : operatorToken.getStartIndex();
+ int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 2 : operatorToken.getStartIndex();
rightText =
rightText.concat(ctx.start.getInputStream().getText(new Interval(startIndex,
ctx.stop.getStopIndex())));
- ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 1,
ctx.stop.getStopIndex(), rightText);
+ ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex(), rightText);
String text = ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
ExpressionSegment left = (ExpressionSegment)
visit(ctx.booleanPrimary());
String operator = "IS";
diff --git
a/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
b/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
index b62a16583de..4930fc81a3c 100644
---
a/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
+++
b/sql-parser/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
@@ -173,12 +173,15 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
import
org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.keyword.KeywordValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.LiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.BooleanLiteralValue;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.NullLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.NumberLiteralValue;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.OtherLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.StringLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.parametermarker.ParameterMarkerValue;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussExecuteStatement;
@@ -315,6 +318,12 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
}
private Optional<String> findBinaryOperator(final AExprContext ctx) {
+ if (null != ctx.IS()) {
+ return Optional.of(ctx.IS().getText());
+ }
+ if (null != ctx.ISNULL()) {
+ return Optional.of("IS");
+ }
if (1 == ctx.aExpr().size()) {
return Optional.empty();
}
@@ -354,6 +363,20 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
}
private BinaryOperationExpression createBinaryOperationSegment(final
AExprContext ctx, final String operator) {
+ if ("IS".equalsIgnoreCase(operator)) {
+ ExpressionSegment left = (ExpressionSegment) visit(ctx.aExpr(0));
+ String rightText;
+ ExpressionSegment right;
+ if (null != ctx.IS()) {
+ rightText = ctx.start.getInputStream().getText(new
Interval(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex())).trim();
+ right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex(), rightText);
+ } else {
+ rightText = ctx.start.getInputStream().getText(new
Interval(ctx.ISNULL().getSymbol().getStartIndex() + 2,
ctx.stop.getStopIndex())).trim();
+ right = new
LiteralExpressionSegment(ctx.ISNULL().getSymbol().getStartIndex() + 2,
ctx.stop.getStopIndex(), rightText);
+ }
+ return new BinaryOperationExpression(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), left, right, "IS",
+ ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex())));
+ }
ExpressionSegment left = (ExpressionSegment) visit(ctx.aExpr(0));
ExpressionSegment right = (ExpressionSegment) visit(ctx.aExpr(1));
String text = ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
@@ -372,11 +395,7 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
return result;
}
if (null != ctx.aexprConst()) {
- ASTNode result = visit(ctx.aexprConst());
- if (result instanceof StringLiteralValue || result instanceof
BooleanLiteralValue || result instanceof NumberLiteralValue) {
- return new
LiteralExpressionSegment(ctx.aexprConst().start.getStartIndex(),
ctx.aexprConst().stop.getStopIndex(), ((LiteralValue) result).getValue());
- }
- return result;
+ return visit(ctx.aexprConst());
}
if (null != ctx.aExpr()) {
return visit(ctx.aExpr());
@@ -464,19 +483,21 @@ public abstract class OpenGaussStatementSQLVisitor
extends OpenGaussStatementBas
@Override
public ASTNode visitAexprConst(final AexprConstContext ctx) {
+ LiteralValue<?> value;
if (null != ctx.numberConst()) {
- return new NumberLiteralValue(ctx.numberConst().getText());
- }
- if (null != ctx.STRING_()) {
- return new StringLiteralValue(ctx.STRING_().getText());
- }
- if (null != ctx.FALSE()) {
- return new BooleanLiteralValue(ctx.FALSE().getText());
- }
- if (null != ctx.TRUE()) {
- return new BooleanLiteralValue(ctx.TRUE().getText());
+ value = new NumberLiteralValue(ctx.numberConst().getText());
+ } else if (null != ctx.STRING_()) {
+ value = new StringLiteralValue(ctx.STRING_().getText());
+ } else if (null != ctx.FALSE()) {
+ value = new BooleanLiteralValue(ctx.FALSE().getText());
+ } else if (null != ctx.TRUE()) {
+ value = new BooleanLiteralValue(ctx.TRUE().getText());
+ } else if (null != ctx.NULL()) {
+ value = new NullLiteralValue(ctx.getText());
+ } else {
+ value = new OtherLiteralValue(ctx.getText());
}
- return new CommonExpressionSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), ctx.getText());
+ return SQLUtil.createLiteralExpression(value,
ctx.start.getStartIndex(), ctx.stop.getStopIndex(), ctx.getText());
}
@Override
diff --git
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
index 14540f1d1d2..3c0f5273a2e 100644
---
a/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
+++
b/sql-parser/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleStatementSQLVisitor.java
@@ -384,9 +384,9 @@ public abstract class OracleStatementSQLVisitor extends
OracleStatementBaseVisit
if (null != ctx.FALSE()) {
operatorToken = ctx.FALSE().getSymbol();
}
- int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 1 : operatorToken.getStartIndex();
+ int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 2 : operatorToken.getStartIndex();
rightText = rightText.concat(ctx.start.getInputStream().getText(new
Interval(startIndex, ctx.stop.getStopIndex())));
- ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 1,
ctx.stop.getStopIndex(), rightText);
+ ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex(), rightText);
String text = ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
ExpressionSegment left = (ExpressionSegment)
visit(ctx.booleanPrimary());
String operator = "IS";
diff --git
a/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
b/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
index c6f9adf8d66..bd7d88aead9 100644
---
a/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
+++
b/sql-parser/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
@@ -173,12 +173,15 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
+import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
import
org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.keyword.KeywordValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.LiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.BooleanLiteralValue;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.NullLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.NumberLiteralValue;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.OtherLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.StringLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.parametermarker.ParameterMarkerValue;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLExecuteStatement;
@@ -315,6 +318,12 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
}
private Optional<String> findBinaryOperator(final AExprContext ctx) {
+ if (null != ctx.IS()) {
+ return Optional.of(ctx.IS().getText());
+ }
+ if (null != ctx.ISNULL()) {
+ return Optional.of("IS");
+ }
if (1 == ctx.aExpr().size()) {
return Optional.empty();
}
@@ -354,6 +363,20 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
}
private BinaryOperationExpression createBinaryOperationSegment(final
AExprContext ctx, final String operator) {
+ if ("IS".equalsIgnoreCase(operator)) {
+ ExpressionSegment left = (ExpressionSegment) visit(ctx.aExpr(0));
+ String rightText;
+ ExpressionSegment right;
+ if (null != ctx.IS()) {
+ rightText = ctx.start.getInputStream().getText(new
Interval(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex())).trim();
+ right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex(), rightText);
+ } else {
+ rightText = ctx.start.getInputStream().getText(new
Interval(ctx.ISNULL().getSymbol().getStartIndex() + 2,
ctx.stop.getStopIndex())).trim();
+ right = new
LiteralExpressionSegment(ctx.ISNULL().getSymbol().getStartIndex() + 2,
ctx.stop.getStopIndex(), rightText);
+ }
+ return new BinaryOperationExpression(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), left, right, "IS",
+ ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex())));
+ }
ExpressionSegment left = (ExpressionSegment) visit(ctx.aExpr(0));
ExpressionSegment right = (ExpressionSegment) visit(ctx.aExpr(1));
String text = ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
@@ -372,11 +395,7 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
return result;
}
if (null != ctx.aexprConst()) {
- ASTNode result = visit(ctx.aexprConst());
- if (result instanceof StringLiteralValue || result instanceof
BooleanLiteralValue || result instanceof NumberLiteralValue) {
- return new
LiteralExpressionSegment(ctx.aexprConst().start.getStartIndex(),
ctx.aexprConst().stop.getStopIndex(), ((LiteralValue) result).getValue());
- }
- return result;
+ return visit(ctx.aexprConst());
}
if (null != ctx.aExpr()) {
return visit(ctx.aExpr());
@@ -461,19 +480,21 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
@Override
public ASTNode visitAexprConst(final AexprConstContext ctx) {
+ LiteralValue<?> value;
if (null != ctx.numberConst()) {
- return new NumberLiteralValue(ctx.numberConst().getText());
- }
- if (null != ctx.STRING_()) {
- return new StringLiteralValue(ctx.STRING_().getText());
- }
- if (null != ctx.FALSE()) {
- return new BooleanLiteralValue(ctx.FALSE().getText());
- }
- if (null != ctx.TRUE()) {
- return new BooleanLiteralValue(ctx.TRUE().getText());
+ value = new NumberLiteralValue(ctx.numberConst().getText());
+ } else if (null != ctx.STRING_()) {
+ value = new StringLiteralValue(ctx.STRING_().getText());
+ } else if (null != ctx.FALSE()) {
+ value = new BooleanLiteralValue(ctx.FALSE().getText());
+ } else if (null != ctx.TRUE()) {
+ value = new BooleanLiteralValue(ctx.TRUE().getText());
+ } else if (null != ctx.NULL()) {
+ value = new NullLiteralValue(ctx.getText());
+ } else {
+ value = new OtherLiteralValue(ctx.getText());
}
- return new CommonExpressionSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), ctx.getText());
+ return SQLUtil.createLiteralExpression(value,
ctx.start.getStartIndex(), ctx.stop.getStopIndex(), ctx.getText());
}
@Override
diff --git
a/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
b/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
index af153683cee..d3d3907c8b7 100644
---
a/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
+++
b/sql-parser/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92StatementSQLVisitor.java
@@ -276,9 +276,9 @@ public abstract class SQL92StatementSQLVisitor extends
SQL92StatementBaseVisitor
if (null != ctx.FALSE()) {
operatorToken = ctx.FALSE().getSymbol();
}
- int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 1 : operatorToken.getStartIndex();
+ int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 2 : operatorToken.getStartIndex();
rightText =
rightText.concat(ctx.start.getInputStream().getText(new Interval(startIndex,
ctx.stop.getStopIndex())));
- ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 1,
ctx.stop.getStopIndex(), rightText);
+ ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex(), rightText);
String text = ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
ExpressionSegment left = (ExpressionSegment)
visit(ctx.booleanPrimary());
String operator = "IS";
diff --git
a/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
b/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
index 454061fc1d7..aebbc7df729 100644
---
a/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
+++
b/sql-parser/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
@@ -391,9 +391,9 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
if (null != ctx.FALSE()) {
operatorToken = ctx.FALSE().getSymbol();
}
- int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 1 : operatorToken.getStartIndex();
+ int startIndex = null == operatorToken ?
ctx.IS().getSymbol().getStopIndex() + 2 : operatorToken.getStartIndex();
rightText =
rightText.concat(ctx.start.getInputStream().getText(new Interval(startIndex,
ctx.stop.getStopIndex())));
- ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 1,
ctx.stop.getStopIndex(), rightText);
+ ExpressionSegment right = new
LiteralExpressionSegment(ctx.IS().getSymbol().getStopIndex() + 2,
ctx.stop.getStopIndex(), rightText);
String text = ctx.start.getInputStream().getText(new
Interval(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
ExpressionSegment left = (ExpressionSegment)
visit(ctx.booleanPrimary());
String operator = "IS";
diff --git a/test/it/parser/src/main/resources/case/dml/call.xml
b/test/it/parser/src/main/resources/case/dml/call.xml
index 0b4dac9cc10..cec4e3986ad 100644
--- a/test/it/parser/src/main/resources/case/dml/call.xml
+++ b/test/it/parser/src/main/resources/case/dml/call.xml
@@ -94,7 +94,7 @@
<call sql-case-id="call_with_mixed_notation">
<procedure-name name="p" start-index="5" stop-index="6" />
<procedure-parameter>
- <common-expression literal-text="null" start-index="7"
stop-index="10" />
+ <literal-expression value="null" start-index="7" stop-index="10" />
</procedure-parameter>
<procedure-parameter>
<literal-expression value="7" start-index="13" stop-index="13" />
@@ -107,7 +107,7 @@
<call sql-case-id="call_with_mixed_notation_with_null">
<procedure-name name="p" start-index="5" stop-index="6" />
<procedure-parameter>
- <common-expression literal-text="null" start-index="7"
stop-index="10" />
+ <literal-expression value="null" start-index="7" stop-index="10" />
</procedure-parameter>
<procedure-parameter>
<common-expression literal-text="c => 4" start-index="13"
stop-index="18" />
diff --git a/test/it/parser/src/main/resources/case/dml/select-expression.xml
b/test/it/parser/src/main/resources/case/dml/select-expression.xml
index 96c742d2a7b..fafbb2f8396 100644
--- a/test/it/parser/src/main/resources/case/dml/select-expression.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-expression.xml
@@ -588,7 +588,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="FALSE" start-index="51"
stop-index="56" />
+ <literal-expression value="FALSE" start-index="52"
stop-index="56" />
</right>
</binary-operation-expression>
</expr>
@@ -621,7 +621,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="NOT FALSE" start-index="51"
stop-index="60" />
+ <literal-expression value="NOT FALSE" start-index="52"
stop-index="60" />
</right>
</binary-operation-expression>
</expr>
@@ -645,7 +645,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="NULL" start-index="45"
stop-index="49" />
+ <literal-expression value="NULL" start-index="46"
stop-index="49" />
</right>
</binary-operation-expression>
</expr>
@@ -669,7 +669,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="NOT NULL" start-index="45"
stop-index="53" />
+ <literal-expression value="NOT NULL" start-index="46"
stop-index="53" />
</right>
</binary-operation-expression>
</expr>
diff --git a/test/it/parser/src/main/resources/case/dml/select-with.xml
b/test/it/parser/src/main/resources/case/dml/select-with.xml
index b428edd5fab..ad621772d83 100644
--- a/test/it/parser/src/main/resources/case/dml/select-with.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-with.xml
@@ -172,7 +172,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="NULL"
start-index="177" stop-index="181" />
+ <literal-expression value="NULL"
start-index="178" stop-index="181" />
</right>
</binary-operation-expression>
</expr>
@@ -221,7 +221,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="NULL"
start-index="186" stop-index="190" />
+ <literal-expression value="NULL"
start-index="187" stop-index="190" />
</right>
</binary-operation-expression>
</expr>
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml
b/test/it/parser/src/main/resources/case/dml/select.xml
index bf44016c31b..97129aff657 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -267,7 +267,7 @@
</left>
<operator>IS</operator>
<right>
- <literal-expression value="NOT NULL"
start-index="43" stop-index="51" />
+ <literal-expression value="NOT NULL"
start-index="44" stop-index="51" />
</right>
</binary-operation-expression>
<common-expression text="item_id IS NOT NULL"
start-index="33" stop-index="51" />
@@ -319,7 +319,7 @@
<operator>IS</operator>
<right>
<!-- TODO: literal value should be 'NOT NULL'
-->
- <literal-expression value="NOT NULL"
start-index="43" stop-index="51" />
+ <literal-expression value="NOT NULL"
start-index="44" stop-index="51" />
</right>
</binary-operation-expression>
<common-expression text="item_id IS NOT NULL"
start-index="33" stop-index="51" />
diff --git
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
index 1325497ece5..e35689ed434 100644
---
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
+++
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
@@ -74,11 +74,16 @@
<output sql="UPDATE t_account_bak SET cipher_certificate_number =
NULL, assisted_query_certificate_number = NULL, like_query_certificate_number =
NULL, plain_certificate_number = NULL, cipher_certificate_number = 'encrypt_',
assisted_query_certificate_number = 'assisted_query_',
like_query_certificate_number = 'like_query_', plain_certificate_number = ''" />
</rewrite-assertion>
- <rewrite-assertion id="update_null_to_clear_plain_where_is_null"
db-types="MySQL">
+ <rewrite-assertion id="update_null_to_clear_plain_where_is_null"
db-types="MySQL,PostgreSQL,openGauss">
<input sql="UPDATE t_account_bak SET certificate_number = NULL WHERE
certificate_number IS NULL" />
<output sql="UPDATE t_account_bak SET cipher_certificate_number =
NULL, assisted_query_certificate_number = NULL, like_query_certificate_number =
NULL, plain_certificate_number = NULL WHERE assisted_query_certificate_number
IS NULL" />
</rewrite-assertion>
+ <rewrite-assertion id="update_null_to_clear_plain_where_isnull"
db-types="PostgreSQL,openGauss">
+ <input sql="UPDATE t_account_bak SET certificate_number = NULL WHERE
certificate_number ISNULL" />
+ <output sql="UPDATE t_account_bak SET cipher_certificate_number =
NULL, assisted_query_certificate_number = NULL, like_query_certificate_number =
NULL, plain_certificate_number = NULL WHERE assisted_query_certificate_number
ISNULL" />
+ </rewrite-assertion>
+
<rewrite-assertion
id="update_null_to_clear_plain_where_is_null_with_multi" db-types="MySQL">
<input sql="UPDATE t_account_bak SET certificate_number = NULL WHERE
certificate_number IS NULL AND status = 'OK' AND certificate_number = '111X'
AND certificate_number like '111X'" />
<output sql="UPDATE t_account_bak SET cipher_certificate_number =
NULL, assisted_query_certificate_number = NULL, like_query_certificate_number =
NULL, plain_certificate_number = NULL WHERE assisted_query_certificate_number
IS NULL AND status = 'OK' AND assisted_query_certificate_number =
'assisted_query_111X' AND like_query_certificate_number like 'like_query_111X'"
/>