This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch issue6987 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit e69aaa68259bd83f90c8717f3029d02e9500620e Author: HTHou <[email protected]> AuthorDate: Mon Aug 15 14:39:02 2022 +0800 [ISSUE-6987] Fix select error when selecting a single quotation mark --- .../IoTDBQueryWithComplexValueFilterIT.java | 33 ++++++++++++++++++++++ .../db/qp/logical/crud/BasicFunctionOperator.java | 5 ++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithComplexValueFilterIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithComplexValueFilterIT.java index 4cb9c91e8c..c57334991e 100644 --- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithComplexValueFilterIT.java +++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryWithComplexValueFilterIT.java @@ -94,6 +94,39 @@ public class IoTDBQueryWithComplexValueFilterIT { } } + @Test + public void testRawQuery3() { + try (Connection connection = EnvFactory.getEnv().getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("insert into root.sg1.d1(time,s3) values(1,'\"')"); + boolean hasResultSet = statement.execute("select * from root.sg1.d1 where s3=\"\\\"\""); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + while (resultSet.next()) { + cnt++; + } + Assert.assertEquals(1, cnt); + } + + hasResultSet = statement.execute("select * from root.sg1.d1 where s3=\'\\\"\'"); + Assert.assertTrue(hasResultSet); + + try (ResultSet resultSet = statement.getResultSet()) { + int cnt = 0; + while (resultSet.next()) { + cnt++; + } + Assert.assertEquals(1, cnt); + } + + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + private static void prepareData() { try (Connection connection = EnvFactory.getEnv().getConnection(); Statement statement = connection.createStatement()) { diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java index f514a7fe79..9665fbc9e7 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/crud/BasicFunctionOperator.java @@ -105,8 +105,9 @@ public class BasicFunctionOperator extends FunctionOperator { ret = funcToken.getUnaryExpression( singlePath, - (value.startsWith("'") && value.endsWith("'")) - || (value.startsWith("\"") && value.endsWith("\"")) + value.length() != 1 + && ((value.startsWith("'") && value.endsWith("'")) + || (value.startsWith("\"") && value.endsWith("\""))) ? new Binary(value.substring(1, value.length() - 1)) : new Binary(value)); } else {
