This is an automated email from the ASF dual-hosted git repository. larsh pushed a commit to branch 4.x-HBase-1.5 in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/4.x-HBase-1.5 by this push: new f3318a9 PHOENIX-5290 HashJoinMoreIT is flapping. f3318a9 is described below commit f3318a97af8c71fc50b0332f46bd297b465983eb Author: Lars Hofhansl <la...@apache.org> AuthorDate: Tue Jul 16 15:39:57 2019 -0700 PHOENIX-5290 HashJoinMoreIT is flapping. --- .../phoenix/end2end/RowValueConstructorIT.java | 32 ++++++++++++++++++++++ .../org/apache/phoenix/compile/WhereOptimizer.java | 8 ++++-- .../org/apache/phoenix/schema/types/PVarchar.java | 2 +- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java index fb04261..390d831 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/RowValueConstructorIT.java @@ -51,6 +51,7 @@ import java.sql.Timestamp; import java.util.List; import java.util.Properties; +import org.apache.phoenix.jdbc.PhoenixPreparedStatement; import org.apache.phoenix.util.DateUtil; import org.apache.phoenix.util.PhoenixRuntime; import org.apache.phoenix.util.PropertiesUtil; @@ -1691,6 +1692,37 @@ public class RowValueConstructorIT extends ParallelStatsDisabledIT { } } + @Test + public void testTrailingSeparator() throws Exception { + Connection conn = null; + try { + conn = DriverManager.getConnection(getUrl()); + conn.createStatement().execute("CREATE TABLE test2961 (\n" + + "ACCOUNT_ID VARCHAR NOT NULL,\n" + "BUCKET_ID VARCHAR NOT NULL,\n" + + "OBJECT_ID VARCHAR NOT NULL,\n" + "OBJECT_VERSION VARCHAR NOT NULL,\n" + + "LOC VARCHAR,\n" + + "CONSTRAINT PK PRIMARY KEY (ACCOUNT_ID, BUCKET_ID, OBJECT_ID, OBJECT_VERSION DESC))"); + + String sql = "SELECT OBJ.ACCOUNT_ID from test2961 as OBJ where " + + "(OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN " + + "((?,?,?,?),(?,?,?,?))"; + + PhoenixPreparedStatement statement = conn.prepareStatement(sql) + .unwrap(PhoenixPreparedStatement.class); + statement.setString(1, new String(new char[] { (char) 3 })); + statement.setString(2, new String(new char[] { (char) 55 })); + statement.setString(3, new String(new char[] { (char) 39 })); + statement.setString(4, new String(new char[] { (char) 0 })); + statement.setString(5, new String(new char[] { (char) 83 })); + statement.setString(6, new String(new char[] { (char) 15 })); + statement.setString(7, new String(new char[] { (char) 55 })); + statement.setString(8, new String(new char[] { (char) 147 })); + statement.optimizeQuery(sql); + } finally { + conn.close(); + } + } + private StringBuilder generateQueryToTest(int numItemsInClause, String fullViewName) { StringBuilder querySb = new StringBuilder("SELECT OBJECT_ID,OBJECT_DATA2,OBJECT_DATA FROM " + fullViewName); diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index b845a09..0964d9d 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -347,7 +347,9 @@ public class WhereOptimizer { byte[] lowerRange = KeyRange.UNBOUND; boolean lowerInclusive = false; // Lower range of trailing part of RVC must be true, so we can form a new range to intersect going forward - if (!range.lowerUnbound() && Bytes.startsWith(range.getLowerRange(), clippedResult.getLowerRange())) { + if (!range.lowerUnbound() + && range.getLowerRange().length > clippedResult.getLowerRange().length + && Bytes.startsWith(range.getLowerRange(), clippedResult.getLowerRange())) { lowerRange = range.getLowerRange(); int offset = clippedResult.getLowerRange().length + separatorLength; ptr.set(lowerRange, offset, lowerRange.length - offset); @@ -356,7 +358,9 @@ public class WhereOptimizer { } byte[] upperRange = KeyRange.UNBOUND; boolean upperInclusive = false; - if (!range.upperUnbound() && Bytes.startsWith(range.getUpperRange(), clippedResult.getUpperRange())) { + if (!range.upperUnbound() + && range.getUpperRange().length > clippedResult.getUpperRange().length + && Bytes.startsWith(range.getUpperRange(), clippedResult.getUpperRange())) { upperRange = range.getUpperRange(); int offset = clippedResult.getUpperRange().length + separatorLength; ptr.set(upperRange, offset, upperRange.length - offset); diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PVarchar.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PVarchar.java index a99925c..bee0d56 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PVarchar.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PVarchar.java @@ -175,7 +175,7 @@ public class PVarchar extends PDataType<String> { sampleChars = new char[length]; } for (int i = 0; i < length; i++) { - sampleChars[i] = (char) RANDOM.get().nextInt(Byte.MAX_VALUE); + sampleChars[i] = (char) (RANDOM.get().nextInt(Byte.MAX_VALUE-2) + 1); } return new String(sampleChars); }