[1/2] PHOENIX-105 Remove commons-csv source
Repository: phoenix Updated Branches: refs/heads/master 4774c6332 - c36973263 http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3697326/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java -- diff --git a/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java b/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java deleted file mode 100644 index 95cf13d..000 --- a/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java +++ /dev/null @@ -1,431 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the License); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.commons.csv; - -import static org.apache.commons.csv.Constants.BACKSPACE; -import static org.apache.commons.csv.Constants.CR; -import static org.apache.commons.csv.Constants.END_OF_STREAM; -import static org.apache.commons.csv.Constants.FF; -import static org.apache.commons.csv.Constants.LF; -import static org.apache.commons.csv.Constants.TAB; -import static org.apache.commons.csv.Constants.UNDEFINED; -import static org.apache.commons.csv.Token.Type.COMMENT; -import static org.apache.commons.csv.Token.Type.EOF; -import static org.apache.commons.csv.Token.Type.EORECORD; -import static org.apache.commons.csv.Token.Type.INVALID; -import static org.apache.commons.csv.Token.Type.TOKEN; - -import java.io.IOException; - -/** - * - * - * @version $Id: Lexer.java 1512650 2013-08-10 11:46:28Z britter $ - */ -final class Lexer { - -/** - * Constant char to use for disabling comments, escapes and encapsulation. The value -2 is used because it - * won't be confused with an EOF signal (-1), and because the Unicode value {@code FFFE} would be encoded as two - * chars (using surrogates) and thus there should never be a collision with a real text char. - */ -private static final char DISABLED = '\ufffe'; - -private final char delimiter; -private final char escape; -private final char quoteChar; -private final char commentStart; - -private final boolean ignoreSurroundingSpaces; -private final boolean ignoreEmptyLines; - -/** The input stream */ -private final ExtendedBufferedReader in; - -/** INTERNAL API. but ctor needs to be called dynamically by PerformanceTest class */ -Lexer(final CSVFormat format, final ExtendedBufferedReader in) { -this.in = in; -this.delimiter = format.getDelimiter(); -this.escape = mapNullToDisabled(format.getEscape()); -this.quoteChar = mapNullToDisabled(format.getQuoteChar()); -this.commentStart = mapNullToDisabled(format.getCommentStart()); -this.ignoreSurroundingSpaces = format.getIgnoreSurroundingSpaces(); -this.ignoreEmptyLines = format.getIgnoreEmptyLines(); -} - -/** - * Returns the next token. - * p/ - * A token corresponds to a term, a record change or an end-of-file indicator. - * - * @param token - *an existing Token object to reuse. The caller is responsible to initialize the Token. - * @return the next token found - * @throws java.io.IOException - * on stream access error - */ -Token nextToken(final Token token) throws IOException { - -// get the last read char (required for empty line detection) -int lastChar = in.getLastChar(); - -// read the next char and set eol -int c = in.read(); -/* - * Note: The following call will swallow LF if c == CR. But we don't need to know if the last char was CR or LF - * - they are equivalent here. - */ -boolean eol = readEndOfLine(c); - -// empty line detection: eol AND (last char was EOL or beginning) -if (ignoreEmptyLines) { -while (eol isStartOfLine(lastChar)) { -// go on char ahead ... -lastChar = c; -c = in.read(); -eol = readEndOfLine(c); -// reached end of file without any content (empty line at the end) -if (isEndOfFile(c)) { -token.type = EOF; -// don't set token.isReady here because no content -return token; -
[2/2] git commit: PHOENIX-105 Remove commons-csv source
PHOENIX-105 Remove commons-csv source Remove the fork of the commons-csv source code and use the released commons-csv artifact. Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/c3697326 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/c3697326 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/c3697326 Branch: refs/heads/master Commit: c36973263296d3eb4b6ffdbf1a43e9f3e4fe5930 Parents: 4774c63 Author: Gabriel Reid gabri...@ngdata.com Authored: Tue Sep 2 10:03:13 2014 +0200 Committer: Gabriel Reid gabri...@ngdata.com Committed: Tue Sep 2 13:00:42 2014 +0200 -- .../src/build/components-major-client.xml | 1 + .../components/all-common-dependencies.xml | 3 +- phoenix-core/pom.xml| 4 + .../java/org/apache/commons/csv/Assertions.java | 36 - .../java/org/apache/commons/csv/CSVFormat.java | 884 --- .../java/org/apache/commons/csv/CSVParser.java | 470 -- .../java/org/apache/commons/csv/CSVPrinter.java | 429 - .../java/org/apache/commons/csv/CSVRecord.java | 225 - .../java/org/apache/commons/csv/Constants.java | 68 -- .../commons/csv/ExtendedBufferedReader.java | 178 .../main/java/org/apache/commons/csv/Lexer.java | 431 - .../main/java/org/apache/commons/csv/Quote.java | 48 - .../main/java/org/apache/commons/csv/Token.java | 75 -- .../org/apache/commons/csv/package-info.java| 82 -- .../apache/phoenix/util/CSVCommonsLoader.java | 6 +- pom.xml | 7 +- 16 files changed, 16 insertions(+), 2931 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3697326/phoenix-assembly/src/build/components-major-client.xml -- diff --git a/phoenix-assembly/src/build/components-major-client.xml b/phoenix-assembly/src/build/components-major-client.xml index 08083da..f1f37c2 100644 --- a/phoenix-assembly/src/build/components-major-client.xml +++ b/phoenix-assembly/src/build/components-major-client.xml @@ -45,6 +45,7 @@ includecommons-logging:commons-logging/include includecommons-lang:commons-lang/include includecommons-cli:commons-cli/include +includeorg.apache.commons:commons-csv/include includeorg.codehaus.jackson:jackson-mapper-asl/include includeorg.codehaus.jackson:jackson-core-asl/include includeorg.xerial.snappy:snappy-java/include http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3697326/phoenix-assembly/src/build/components/all-common-dependencies.xml -- diff --git a/phoenix-assembly/src/build/components/all-common-dependencies.xml b/phoenix-assembly/src/build/components/all-common-dependencies.xml index 7d943f6..df4a32f 100644 --- a/phoenix-assembly/src/build/components/all-common-dependencies.xml +++ b/phoenix-assembly/src/build/components/all-common-dependencies.xml @@ -32,6 +32,7 @@ includecommons-io:commons-io/include includecommons-lang:commons-lang/include includecommons-logging:commons-logging/include +includeorg.apache.commons:commons-csv/include includecom.google.guava:guava/include includeorg.apache.hadoop:hadoop*/include includecom.google.protobuf:protobuf-java/include @@ -59,4 +60,4 @@ /includes /dependencySet /dependencySets -/component \ No newline at end of file +/component http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3697326/phoenix-core/pom.xml -- diff --git a/phoenix-core/pom.xml b/phoenix-core/pom.xml index 73b27bf..d5774ea 100644 --- a/phoenix-core/pom.xml +++ b/phoenix-core/pom.xml @@ -321,6 +321,10 @@ groupIdcommons-collections/groupId artifactIdcommons-collections/artifactId /dependency +dependency + groupIdorg.apache.commons/groupId + artifactIdcommons-csv/artifactId +/dependency /dependencies profiles http://git-wip-us.apache.org/repos/asf/phoenix/blob/c3697326/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java -- diff --git a/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java b/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java deleted file mode 100644 index 63c330a..000 --- a/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright
[2/2] git commit: PHOENIX-105 Remove commons-csv source
PHOENIX-105 Remove commons-csv source Remove the fork of the commons-csv source code and use the released commons-csv artifact. Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/ab49a16b Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/ab49a16b Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/ab49a16b Branch: refs/heads/4.0 Commit: ab49a16b34905bac1a9b0b9d5f0c8f1006a84e58 Parents: 214a4cc Author: Gabriel Reid gabri...@ngdata.com Authored: Tue Sep 2 10:03:13 2014 +0200 Committer: Gabriel Reid gabri...@ngdata.com Committed: Tue Sep 2 12:58:45 2014 +0200 -- .../src/build/components-major-client.xml | 1 + .../components/all-common-dependencies.xml | 3 +- phoenix-core/pom.xml| 4 + .../java/org/apache/commons/csv/Assertions.java | 36 - .../java/org/apache/commons/csv/CSVFormat.java | 884 --- .../java/org/apache/commons/csv/CSVParser.java | 470 -- .../java/org/apache/commons/csv/CSVPrinter.java | 429 - .../java/org/apache/commons/csv/CSVRecord.java | 225 - .../java/org/apache/commons/csv/Constants.java | 68 -- .../commons/csv/ExtendedBufferedReader.java | 178 .../main/java/org/apache/commons/csv/Lexer.java | 431 - .../main/java/org/apache/commons/csv/Quote.java | 48 - .../main/java/org/apache/commons/csv/Token.java | 75 -- .../org/apache/commons/csv/package-info.java| 82 -- .../apache/phoenix/util/CSVCommonsLoader.java | 6 +- pom.xml | 7 +- 16 files changed, 16 insertions(+), 2931 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/ab49a16b/phoenix-assembly/src/build/components-major-client.xml -- diff --git a/phoenix-assembly/src/build/components-major-client.xml b/phoenix-assembly/src/build/components-major-client.xml index 08083da..f1f37c2 100644 --- a/phoenix-assembly/src/build/components-major-client.xml +++ b/phoenix-assembly/src/build/components-major-client.xml @@ -45,6 +45,7 @@ includecommons-logging:commons-logging/include includecommons-lang:commons-lang/include includecommons-cli:commons-cli/include +includeorg.apache.commons:commons-csv/include includeorg.codehaus.jackson:jackson-mapper-asl/include includeorg.codehaus.jackson:jackson-core-asl/include includeorg.xerial.snappy:snappy-java/include http://git-wip-us.apache.org/repos/asf/phoenix/blob/ab49a16b/phoenix-assembly/src/build/components/all-common-dependencies.xml -- diff --git a/phoenix-assembly/src/build/components/all-common-dependencies.xml b/phoenix-assembly/src/build/components/all-common-dependencies.xml index 7d943f6..df4a32f 100644 --- a/phoenix-assembly/src/build/components/all-common-dependencies.xml +++ b/phoenix-assembly/src/build/components/all-common-dependencies.xml @@ -32,6 +32,7 @@ includecommons-io:commons-io/include includecommons-lang:commons-lang/include includecommons-logging:commons-logging/include +includeorg.apache.commons:commons-csv/include includecom.google.guava:guava/include includeorg.apache.hadoop:hadoop*/include includecom.google.protobuf:protobuf-java/include @@ -59,4 +60,4 @@ /includes /dependencySet /dependencySets -/component \ No newline at end of file +/component http://git-wip-us.apache.org/repos/asf/phoenix/blob/ab49a16b/phoenix-core/pom.xml -- diff --git a/phoenix-core/pom.xml b/phoenix-core/pom.xml index a74abcd..5e25056 100644 --- a/phoenix-core/pom.xml +++ b/phoenix-core/pom.xml @@ -321,6 +321,10 @@ groupIdcommons-collections/groupId artifactIdcommons-collections/artifactId /dependency +dependency + groupIdorg.apache.commons/groupId + artifactIdcommons-csv/artifactId +/dependency /dependencies profiles http://git-wip-us.apache.org/repos/asf/phoenix/blob/ab49a16b/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java -- diff --git a/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java b/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java deleted file mode 100644 index 63c330a..000 --- a/phoenix-core/src/main/java/org/apache/commons/csv/Assertions.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright
[1/2] PHOENIX-105 Remove commons-csv source
Repository: phoenix Updated Branches: refs/heads/3.0 b5cbb79b6 - 8e19e68bb http://git-wip-us.apache.org/repos/asf/phoenix/blob/8e19e68b/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java -- diff --git a/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java b/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java deleted file mode 100644 index 95cf13d..000 --- a/phoenix-core/src/main/java/org/apache/commons/csv/Lexer.java +++ /dev/null @@ -1,431 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the License); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.commons.csv; - -import static org.apache.commons.csv.Constants.BACKSPACE; -import static org.apache.commons.csv.Constants.CR; -import static org.apache.commons.csv.Constants.END_OF_STREAM; -import static org.apache.commons.csv.Constants.FF; -import static org.apache.commons.csv.Constants.LF; -import static org.apache.commons.csv.Constants.TAB; -import static org.apache.commons.csv.Constants.UNDEFINED; -import static org.apache.commons.csv.Token.Type.COMMENT; -import static org.apache.commons.csv.Token.Type.EOF; -import static org.apache.commons.csv.Token.Type.EORECORD; -import static org.apache.commons.csv.Token.Type.INVALID; -import static org.apache.commons.csv.Token.Type.TOKEN; - -import java.io.IOException; - -/** - * - * - * @version $Id: Lexer.java 1512650 2013-08-10 11:46:28Z britter $ - */ -final class Lexer { - -/** - * Constant char to use for disabling comments, escapes and encapsulation. The value -2 is used because it - * won't be confused with an EOF signal (-1), and because the Unicode value {@code FFFE} would be encoded as two - * chars (using surrogates) and thus there should never be a collision with a real text char. - */ -private static final char DISABLED = '\ufffe'; - -private final char delimiter; -private final char escape; -private final char quoteChar; -private final char commentStart; - -private final boolean ignoreSurroundingSpaces; -private final boolean ignoreEmptyLines; - -/** The input stream */ -private final ExtendedBufferedReader in; - -/** INTERNAL API. but ctor needs to be called dynamically by PerformanceTest class */ -Lexer(final CSVFormat format, final ExtendedBufferedReader in) { -this.in = in; -this.delimiter = format.getDelimiter(); -this.escape = mapNullToDisabled(format.getEscape()); -this.quoteChar = mapNullToDisabled(format.getQuoteChar()); -this.commentStart = mapNullToDisabled(format.getCommentStart()); -this.ignoreSurroundingSpaces = format.getIgnoreSurroundingSpaces(); -this.ignoreEmptyLines = format.getIgnoreEmptyLines(); -} - -/** - * Returns the next token. - * p/ - * A token corresponds to a term, a record change or an end-of-file indicator. - * - * @param token - *an existing Token object to reuse. The caller is responsible to initialize the Token. - * @return the next token found - * @throws java.io.IOException - * on stream access error - */ -Token nextToken(final Token token) throws IOException { - -// get the last read char (required for empty line detection) -int lastChar = in.getLastChar(); - -// read the next char and set eol -int c = in.read(); -/* - * Note: The following call will swallow LF if c == CR. But we don't need to know if the last char was CR or LF - * - they are equivalent here. - */ -boolean eol = readEndOfLine(c); - -// empty line detection: eol AND (last char was EOL or beginning) -if (ignoreEmptyLines) { -while (eol isStartOfLine(lastChar)) { -// go on char ahead ... -lastChar = c; -c = in.read(); -eol = readEndOfLine(c); -// reached end of file without any content (empty line at the end) -if (isEndOfFile(c)) { -token.type = EOF; -// don't set token.isReady here because no content -return token; -
git commit: PHOENIX-852 Optimize child/parent foreign key joins
Repository: phoenix Updated Branches: refs/heads/3.0 8e19e68bb - be6465a89 PHOENIX-852 Optimize child/parent foreign key joins Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/be6465a8 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/be6465a8 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/be6465a8 Branch: refs/heads/3.0 Commit: be6465a89578fbb96c3324bdf88b44218acf5e80 Parents: 8e19e68 Author: maryannxue maryann...@apache.org Authored: Tue Sep 2 11:28:07 2014 -0400 Committer: maryannxue maryann...@apache.org Committed: Tue Sep 2 11:28:07 2014 -0400 -- .../org/apache/phoenix/end2end/HashJoinIT.java | 209 ++- .../apache/phoenix/compile/JoinCompiler.java| 19 ++ .../apache/phoenix/compile/QueryCompiler.java | 43 +++- .../org/apache/phoenix/compile/ScanRanges.java | 6 +- .../apache/phoenix/compile/WhereCompiler.java | 33 ++- .../apache/phoenix/compile/WhereOptimizer.java | 75 +- .../apache/phoenix/execute/HashJoinPlan.java| 103 +++- .../apache/phoenix/join/HashCacheClient.java| 14 +- .../java/org/apache/phoenix/parse/HintNode.java | 8 + .../apache/phoenix/schema/PArrayDataType.java | 13 + .../org/apache/phoenix/schema/PDataType.java| 252 ++- .../apache/phoenix/schema/PDataTypeTest.java| 21 +- 12 files changed, 771 insertions(+), 25 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/be6465a8/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java index d5f1297..b6372fd 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java @@ -228,7 +228,8 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT { CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_ORDER_TABLE_DISPLAY_NAME + \n + SERVER FILTER BY QUANTITY 5000\n + BUILD HASH TABLE 1\n + -CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_SUPPLIER_TABLE_DISPLAY_NAME, +CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + \n + +DYNAMIC SERVER FILTER BY item_id IN (O.item_id), /* * testSelfJoin() * SELECT i2.item_id, i1.name FROM joinItemTable i1 @@ -239,7 +240,8 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT { PARALLEL EQUI-JOIN 1 HASH TABLES:\n + BUILD HASH TABLE 0\n + CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_ITEM_TABLE_DISPLAY_NAME + \n + -SERVER FILTER BY FIRST KEY ONLY, +SERVER FILTER BY FIRST KEY ONLY\n + +DYNAMIC SERVER FILTER BY item_id BETWEEN MIN/MAX OF (I2.item_id), /* * testSelfJoin() * SELECT i1.name, i2.name FROM joinItemTable i1 @@ -251,7 +253,8 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT { CLIENT MERGE SORT\n + PARALLEL EQUI-JOIN 1 HASH TABLES:\n + BUILD HASH TABLE 0\n + -CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_ITEM_TABLE_DISPLAY_NAME, +CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_ITEM_TABLE_DISPLAY_NAME + \n + +DYNAMIC SERVER FILTER BY item_id BETWEEN MIN/MAX OF (I2.supplier_id), /* * testStarJoin() * SELECT order_id, c.name, i.name iname, quantity, o.date @@ -282,7 +285,8 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT { CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_ORDER_TABLE_DISPLAY_NAME + \n + PARALLEL EQUI-JOIN 1 HASH TABLES:\n + BUILD HASH TABLE 0\n + -CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_CUSTOMER_TABLE_DISPLAY_NAME, +CLIENT PARALLEL 1-WAY FULL SCAN OVER + JOIN_CUSTOMER_TABLE_DISPLAY_NAME + \n + +DYNAMIC SERVER FILTER BY item_id BETWEEN MIN/MAX OF (O.item_id), /* * testSubJoin() * SELECT * FROM joinCustomerTable c @@ -309,7 +313,8 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT { SERVER FILTER BY NAME != 'T3'\n + PARALLEL
Apache-Phoenix | 4.0 | Hadoop1 | Build Successful
4.0 branch build status Successful Source repository https://git-wip-us.apache.org/repos/asf/incubator-phoenix.git Compiled Artifacts https://builds.apache.org/job/Phoenix-4.0-hadoop1/lastSuccessfulBuild/artifact/ Test Report https://builds.apache.org/job/Phoenix-4.0-hadoop1/lastCompletedBuild/testReport/ Changes [maryannxue] PHOENIX-852 Optimize child/parent foreign key joins
Apache-Phoenix | Master | Hadoop1 | Build Successful
Master branch build status Successful Source repository https://git-wip-us.apache.org/repos/asf/incubator-phoenix.git Last Successful Compiled Artifacts https://builds.apache.org/job/Phoenix-master-hadoop1/lastSuccessfulBuild/artifact/ Last Complete Test Report https://builds.apache.org/job/Phoenix-master-hadoop1/lastCompletedBuild/testReport/ Changes [maryannxue] PHOENIX-852 Optimize child/parent foreign key joins