svn commit: r1636076 - in /phoenix: phoenix-docs/src/docsrc/help/ phoenix-docs/src/tools/org/h2/build/doc/ site/publish/ site/publish/language/

2014-11-01 Thread jamestaylor
Author: jamestaylor
Date: Sun Nov  2 00:40:47 2014
New Revision: 1636076

URL: http://svn.apache.org/r1636076
Log:
Update reference for subqueries

Modified:
phoenix/phoenix-docs/src/docsrc/help/phoenix.csv
phoenix/phoenix-docs/src/tools/org/h2/build/doc/dictionary.txt
phoenix/site/publish/language/datatypes.html
phoenix/site/publish/language/functions.html
phoenix/site/publish/language/index.html
phoenix/site/publish/pig_integration.html

Modified: phoenix/phoenix-docs/src/docsrc/help/phoenix.csv
URL: 
http://svn.apache.org/viewvc/phoenix/phoenix-docs/src/docsrc/help/phoenix.csv?rev=1636076&r1=1636075&r2=1636076&view=diff
==
--- phoenix/phoenix-docs/src/docsrc/help/phoenix.csv (original)
+++ phoenix/phoenix-docs/src/docsrc/help/phoenix.csv Sun Nov  2 00:40:47 2014
@@ -533,21 +533,28 @@ ID=1 OR NAME='Hi'
 "
 
 "Other Grammar","And Condition","
-condition [ { AND condition } [...] ]
+booleanCondition [ { AND booleanCondition } [...] ]
 ","
-Value or condition.
+Condition separated by AND.
+","
+FOO!='bar' AND ID=1
+"
+
+"Other Grammar","Boolean Condition","
+[NOT] condition
+","
+Boolean condition.
 ","
 ID=1 AND NAME='Hi'
 "
 
 "Other Grammar","Condition","
-operand [ compare { operand }
-| [ NOT ] IN ( { constantOperand [,...] } )
-| [ NOT ] LIKE operand
-| [ NOT ] ILIKE operand
-| [ NOT ] BETWEEN operand AND operand
-| IS [ NOT ] NULL ]
-| NOT expression
+operand [ { = | < | > | <= | >= | <> | != } { rhsOperand }
+| { LIKE | ILIKE } operand
+| IS [ NOT ] NULL
+| [ NOT ] { IN ( { select | { constantOperand [,...] } } )
+| EXISTS ( select )
+| BETWEEN operand AND operand } ]
 ","
 Boolean value or condition.
 When comparing with LIKE, the wildcards characters are ""_"" (any one 
character)
@@ -557,15 +564,21 @@ To search for the characters ""%"" and
 Patterns that end with an escape character are invalid and the expression 
returns NULL.
 BETWEEN does an inclusive comparison for both operands.
 ","
+FOO = 'bar'
 NAME LIKE 'Jo%'
+IN (1, 2, 3)
+NOT EXISTS (SELECT 1 FROM FOO WHERE BAR < 10)
+N BETWEEN 1 and 100
 "
 
-"Other Grammar","Compare","
-<> | <= | >= | = | < | > | !=
+"Other Grammar","RHS Operand","
+operand | { ANY | ALL } ( { operand | select } )
 ","
-Comparison operator. The operator != is the same as <>.
+Right-hand side operand
 ","
-<>
+s.my_col
+ANY(my_col + 1)
+ALL(select foo from bar where bas > 5)
 "
 
 "Other Grammar","Operand","

Modified: phoenix/phoenix-docs/src/tools/org/h2/build/doc/dictionary.txt
URL: 
http://svn.apache.org/viewvc/phoenix/phoenix-docs/src/tools/org/h2/build/doc/dictionary.txt?rev=1636076&r1=1636075&r2=1636076&view=diff
==
--- phoenix/phoenix-docs/src/tools/org/h2/build/doc/dictionary.txt (original)
+++ phoenix/phoenix-docs/src/tools/org/h2/build/doc/dictionary.txt Sun Nov  2 
00:40:47 2014
@@ -726,4 +726,4 @@ coercion coerce coerces bas precise subs
 decisions choosing tiebreaker broadcast substantially unlikely act decision 
adjacent
 managed declares tenant tenants especially truth determines misspelled salting 
salted turning adhoc
 rpc doled paranthesis reaching satisfy cocos satisfies pads indian inputting 
prague
-guideposts collects ilike
+guideposts collects ilike rhs

Modified: phoenix/site/publish/language/datatypes.html
URL: 
http://svn.apache.org/viewvc/phoenix/site/publish/language/datatypes.html?rev=1636076&r1=1636075&r2=1636076&view=diff
==
--- phoenix/site/publish/language/datatypes.html (original)
+++ phoenix/site/publish/language/datatypes.html Sun Nov  2 00:40:47 2014
@@ -1,7 +1,7 @@
 
 
 
 

Modified: phoenix/site/publish/language/functions.html
URL: 
http://svn.apache.org/viewvc/phoenix/site/publish/language/functions.html?rev=1636076&r1=1636075&r2=1636076&view=diff
==
--- phoenix/site/publish/language/functions.html (original)
+++ phoenix/site/publish/language/functions.html Sun Nov  2 00:40:47 2014
@@ -1,7 +1,7 @@
 
 
 
 

Modified: phoenix/site/publish/language/index.html
URL: 
http://svn.apache.org/viewvc/phoenix/site/publish/language/index.html?rev=1636076&r1=1636075&r2=1636076&view=diff
==
--- phoenix/site/publish/language/index.html (original)
+++ phoenix/site/publish/language/index.html Sun Nov  2 00:40:47 2014
@@ -1,7 +1,7 @@
 
 
 
 
@@ -254,9 +254,11 @@ syntax-end -->
 
 And Condition
 
+Boolean Condition
+
 Condition
 
-Compare
+RHS Operand
 
 Operand
 
@@ -345,9 +347,9 @@ syntax-end -->
 Split Point
 
 Table Spec
-
 
 Aliased Table Ref
+
 
  

Build failed in Jenkins: Phoenix | Master #468

2014-11-01 Thread Apache Jenkins Server
See 

Changes:

[maryannxue] PHOENIX-1399 Support cross joins and comma-separated table list

--
[...truncated 350 lines...]
Running org.apache.phoenix.end2end.UpsertSelectIT
Tests run: 63, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 50.219 sec - 
in org.apache.phoenix.end2end.CaseStatementIT
Running org.apache.phoenix.end2end.SpooledOrderByIT
Tests run: 49, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 47.867 sec - 
in org.apache.phoenix.end2end.CastAndCoerceIT
Running org.apache.phoenix.end2end.VariableLengthPKIT
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.87 sec - in 
org.apache.phoenix.end2end.SpooledOrderByIT
Running org.apache.phoenix.end2end.ScanQueryIT
Tests run: 77, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 58.917 sec - 
in org.apache.phoenix.end2end.NotQueryIT
Running org.apache.phoenix.end2end.DynamicUpsertIT
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.272 sec - in 
org.apache.phoenix.end2end.DynamicUpsertIT
Running org.apache.phoenix.end2end.CreateTableIT
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 25.501 sec - 
in org.apache.phoenix.end2end.UpsertSelectIT
Running org.apache.phoenix.end2end.DynamicColumnIT
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.892 sec - in 
org.apache.phoenix.end2end.DynamicColumnIT
Running org.apache.phoenix.end2end.DerivedTableIT
Tests run: 50, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 22.787 sec - 
in org.apache.phoenix.end2end.VariableLengthPKIT
Running org.apache.phoenix.end2end.UpsertValuesIT
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 20.919 sec - 
in org.apache.phoenix.end2end.CreateTableIT
Running org.apache.phoenix.end2end.GroupByIT
Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 14.162 sec - 
in org.apache.phoenix.end2end.DerivedTableIT
Running org.apache.phoenix.end2end.SequenceIT
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.446 sec - 
in org.apache.phoenix.end2end.UpsertValuesIT
Running org.apache.phoenix.end2end.ArrayIT
Tests run: 50, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 30.356 sec - 
in org.apache.phoenix.end2end.SequenceIT
Running org.apache.phoenix.end2end.RowValueConstructorIT
Tests run: 48, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 24.649 sec - 
in org.apache.phoenix.end2end.ArrayIT
Running org.apache.phoenix.end2end.ExtendedQueryExecIT
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.068 sec - in 
org.apache.phoenix.end2end.ExtendedQueryExecIT
Running org.apache.phoenix.end2end.QueryIT
Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 24.458 sec - 
in org.apache.phoenix.end2end.RowValueConstructorIT
Running org.apache.phoenix.end2end.IsNullIT
Tests run: 119, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 83.907 sec - 
in org.apache.phoenix.end2end.ScanQueryIT
Running org.apache.phoenix.end2end.ToCharFunctionIT
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.866 sec - in 
org.apache.phoenix.end2end.IsNullIT
Running org.apache.phoenix.end2end.FunkyNamesIT
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.439 sec - in 
org.apache.phoenix.end2end.ToCharFunctionIT
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.133 sec - in 
org.apache.phoenix.end2end.FunkyNamesIT
Running org.apache.phoenix.end2end.salted.SaltedTableIT
Running org.apache.phoenix.end2end.NativeHBaseTypesIT
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.413 sec - in 
org.apache.phoenix.end2end.NativeHBaseTypesIT
Running org.apache.phoenix.end2end.CompareDecimalToLongIT
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.828 sec - in 
org.apache.phoenix.end2end.salted.SaltedTableIT
Running org.apache.phoenix.end2end.TruncateFunctionIT
Tests run: 8, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.439 sec - in 
org.apache.phoenix.end2end.CompareDecimalToLongIT
Running org.apache.phoenix.end2end.QueryDatabaseMetaDataIT
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.769 sec - in 
org.apache.phoenix.end2end.TruncateFunctionIT
Running org.apache.phoenix.end2end.PercentileIT
Tests run: 91, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 74.502 sec - 
in org.apache.phoenix.end2end.GroupByIT
Running org.apache.phoenix.end2end.ToNumberFunctionIT
Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.161 sec - in 
org.apache.phoenix.end2end.PercentileIT
Running org.apache.phoenix.end2end.OrderByIT
Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.679 sec - in 
org.apache.phoenix.end2end.ToNumberFunctionIT
Running org.apache.phoenix.end2end.GroupByCaseIT
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.103 sec - in 
org.apache.phoenix.end2end.GroupByCaseIT
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.909 sec 

Apache-Phoenix | 4.0 | Build Successful

2014-11-01 Thread Apache Jenkins Server
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/lastSuccessfulBuild/artifact/

Test Report https://builds.apache.org/job/Phoenix-4.0/lastCompletedBuild/testReport/

Changes
[maryannxue] PHOENIX-944 Support derived tables in FROM clause that needs extra steps of client-side aggregation or other processing

[maryannxue] PHOENIX-944 Support derived tables in FROM clause that needs extra steps of client-side aggregation or other processing

[maryannxue] PHOENIX-1399 Support cross joins and comma-separated table list



Apache-Phoenix | 3.0 | Hadoop1 | Build Successful

2014-11-01 Thread Apache Jenkins Server
3.0 branch build status Successful
Source repository https://git-wip-us.apache.org/repos/asf/phoenix.git

Last Successful Compiled Artifacts https://builds.apache.org/job/Phoenix-3.0-hadoop1/lastSuccessfulBuild/artifact/

Last Complete Test Report https://builds.apache.org/job/Phoenix-3.0-hadoop1/lastCompletedBuild/testReport/

Changes
[maryannxue] PHOENIX-1399 Support cross joins and comma-separated table list



git commit: PHOENIX-1399 Support cross joins and comma-separated table list

2014-11-01 Thread maryannxue
Repository: phoenix
Updated Branches:
  refs/heads/3.0 8b460b5c0 -> c0eda2dab


PHOENIX-1399 Support cross joins and comma-separated table list


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/c0eda2da
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/c0eda2da
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/c0eda2da

Branch: refs/heads/3.0
Commit: c0eda2dab383a113ec7d7f1837b7499072a6f103
Parents: 8b460b5
Author: maryannxue 
Authored: Sat Nov 1 15:04:30 2014 -0400
Committer: maryannxue 
Committed: Sat Nov 1 15:04:30 2014 -0400

--
 .../org/apache/phoenix/end2end/HashJoinIT.java  |  70 +-
 phoenix-core/src/main/antlr3/PhoenixSQL.g   |  30 +--
 .../apache/phoenix/compile/DeleteCompiler.java  |   2 +-
 .../apache/phoenix/compile/FromCompiler.java|  10 +-
 .../apache/phoenix/compile/JoinCompiler.java| 231 ++-
 .../apache/phoenix/compile/QueryCompiler.java   |   4 +-
 .../phoenix/compile/StatementNormalizer.java|  12 +-
 .../phoenix/compile/SubqueryRewriter.java   |   6 +-
 .../phoenix/compile/SubselectRewriter.java  |   6 +-
 .../apache/phoenix/compile/UpsertCompiler.java  |   2 +-
 .../phoenix/exception/SQLExceptionCode.java |   1 +
 .../apache/phoenix/jdbc/PhoenixStatement.java   |   4 +-
 .../apache/phoenix/optimize/QueryOptimizer.java |   4 +-
 .../org/apache/phoenix/parse/JoinPartNode.java  |  53 -
 .../apache/phoenix/parse/ParseNodeFactory.java  |  21 +-
 .../apache/phoenix/parse/ParseNodeRewriter.java |  25 +-
 .../apache/phoenix/parse/SelectStatement.java   |  18 +-
 17 files changed, 239 insertions(+), 260 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/c0eda2da/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 3f1bfc7..2486056 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
@@ -41,7 +41,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
@@ -1436,13 +1435,22 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
 
 @Test
 public void testStarJoin() throws Exception {
-String[] query = new String[2];
+String[] query = new String[5];
 query[0] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = 
c.\"customer_id\" JOIN " 
 + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = i.\"item_id\" 
ORDER BY \"order_id\"";
-query[1] = "SELECT /*+ NO_STAR_JOIN*/ \"order_id\", c.name, i.name 
iname, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
+query[1] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o, " 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c, " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
+query[2] = "SELECT /*+ NO_STAR_JOIN*/ \"order_id\", c.name, i.name 
iname, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = 
c.\"customer_id\" JOIN " 
 + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = 
i.\"item_id\" ORDER BY \"order_id\"";
+query[3] = "SELECT /*+ NO_STAR_JOIN*/  \"order_id\", c.name, i.name 
iname, quantity, o.date FROM (" + JOIN_ORDER_TABLE_FULL_NAME + " o, " 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c), " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
+query[4] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o, (" 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c, " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i) WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
 Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
 Connection conn = DriverManager.getConnection(getUrl(), props);
 try {
@@ -1486,8 +1494,10 @@ public class HashJoinIT ext

[2/5] git commit: PHOENIX-944 Support derived tables in FROM clause that needs extra steps of client-side aggregation or other processing

2014-11-01 Thread maryannxue
PHOENIX-944 Support derived tables in FROM clause that needs extra steps of 
client-side aggregation or other processing


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/f004e135
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/f004e135
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/f004e135

Branch: refs/heads/4.0
Commit: f004e135c8ae72c6a22ed9879b37dd6dcf86627a
Parents: e8a0355
Author: maryannxue 
Authored: Wed Oct 22 13:48:35 2014 -0400
Committer: maryannxue 
Committed: Thu Oct 23 23:25:18 2014 -0400

--
 .../apache/phoenix/end2end/DerivedTableIT.java  | 282 +--
 .../org/apache/phoenix/end2end/SubqueryIT.java  |  12 +
 .../apache/phoenix/compile/FromCompiler.java|  27 +-
 .../apache/phoenix/compile/GroupByCompiler.java |   5 +-
 .../apache/phoenix/compile/JoinCompiler.java|   2 +-
 .../apache/phoenix/compile/OrderByCompiler.java |   2 +-
 .../apache/phoenix/compile/QueryCompiler.java   |  58 +++-
 .../phoenix/compile/SubqueryRewriter.java   |  10 +-
 .../TrackOrderPreservingExpressionCompiler.java |  27 +-
 .../apache/phoenix/compile/WhereCompiler.java   |  33 +--
 .../GroupedAggregateRegionObserver.java |   2 +-
 .../coprocessor/HashJoinRegionScanner.java  |   4 +-
 .../phoenix/coprocessor/ScanRegionObserver.java |   3 +-
 .../UngroupedAggregateRegionObserver.java   |   2 +-
 .../phoenix/execute/ClientAggregatePlan.java| 229 +++
 .../phoenix/execute/ClientProcessingPlan.java   |  82 ++
 .../apache/phoenix/execute/ClientScanPlan.java  |  92 ++
 .../apache/phoenix/execute/HashJoinPlan.java|  24 +-
 .../phoenix/execute/TupleProjectionPlan.java|  49 +---
 .../apache/phoenix/execute/TupleProjector.java  | 276 ++
 .../expression/ProjectedColumnExpression.java   |   2 +-
 .../DistinctValueClientAggregator.java  |   7 +-
 .../BaseGroupedAggregatingResultIterator.java   | 105 +++
 .../GroupedAggregatingResultIterator.java   |  67 +
 .../iterate/LookAheadResultIterator.java|   4 +
 .../org/apache/phoenix/join/TupleProjector.java | 260 -
 .../apache/phoenix/optimize/QueryOptimizer.java |   1 +
 .../apache/phoenix/parse/ParseNodeFactory.java  |   4 +-
 .../apache/phoenix/parse/SelectStatement.java   |   7 +
 .../org/apache/phoenix/schema/ColumnRef.java|   2 +-
 .../java/org/apache/phoenix/util/IndexUtil.java |   2 +-
 31 files changed, 1183 insertions(+), 499 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/f004e135/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
--
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
index 8a80764..8ef542a 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DerivedTableIT.java
@@ -35,19 +35,19 @@ import static 
org.apache.phoenix.util.TestUtil.TEST_PROPERTIES;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
+import java.sql.Array;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
-import java.sql.SQLFeatureNotSupportedException;
 import java.util.Collection;
 import java.util.List;
 import java.util.Properties;
 
 import org.apache.phoenix.util.PhoenixRuntime;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.apache.phoenix.util.QueryUtil;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -61,33 +61,65 @@ import com.google.common.collect.Lists;
 @RunWith(Parameterized.class)
 public class DerivedTableIT extends BaseClientManagedTimeIT {
 private static final String tenantId = getOrganizationId();
-private static final String MSG = "Complex nested queries not supported.";
 
 private long ts;
-private String indexDDL;
+private String[] indexDDL;
+private String[] plans;
 
-public DerivedTableIT(String indexDDL) {
+public DerivedTableIT(String[] indexDDL, String[] plans) {
 this.indexDDL = indexDDL;
+this.plans = plans;
 }
 
 @Before
 public void initTable() throws Exception {
  ts = nextTimestamp();
 initATableValues(tenantId, getDefaultSplits(tenantId), null, ts);
-if (indexDDL != null && indexDDL.length() > 0) {
+if (indexDDL != null && indexDDL.length > 0) {
 Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
 

[1/5] PHOENIX-944 Support derived tables in FROM clause that needs extra steps of client-side aggregation or other processing

2014-11-01 Thread maryannxue
Repository: phoenix
Updated Branches:
  refs/heads/4.0 77f24050c -> 91e29c60d


http://git-wip-us.apache.org/repos/asf/phoenix/blob/f004e135/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjector.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjector.java 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjector.java
new file mode 100644
index 000..346a9fd
--- /dev/null
+++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/TupleProjector.java
@@ -0,0 +1,276 @@
+/*
+ * 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.phoenix.execute;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.hadoop.hbase.Cell;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.io.WritableUtils;
+import org.apache.phoenix.compile.ColumnProjector;
+import org.apache.phoenix.compile.JoinCompiler.ProjectedPTableWrapper;
+import org.apache.phoenix.compile.RowProjector;
+import org.apache.phoenix.expression.Expression;
+import org.apache.phoenix.expression.ExpressionType;
+import org.apache.phoenix.schema.KeyValueSchema;
+import org.apache.phoenix.schema.KeyValueSchema.KeyValueSchemaBuilder;
+import org.apache.phoenix.schema.PColumn;
+import org.apache.phoenix.schema.ValueBitSet;
+import org.apache.phoenix.schema.tuple.BaseTuple;
+import org.apache.phoenix.schema.tuple.Tuple;
+import org.apache.phoenix.util.KeyValueUtil;
+import org.apache.phoenix.util.SchemaUtil;
+
+public class TupleProjector {
+public static final byte[] VALUE_COLUMN_FAMILY = Bytes.toBytes("_v");
+public static final byte[] VALUE_COLUMN_QUALIFIER = new byte[0];
+
+private static final String SCAN_PROJECTOR = "scanProjector";
+
+private final KeyValueSchema schema;
+private final Expression[] expressions;
+private ValueBitSet valueSet;
+private final ImmutableBytesWritable ptr = new ImmutableBytesWritable();
+
+public TupleProjector(RowProjector rowProjector) {
+List columnProjectors = 
rowProjector.getColumnProjectors();
+int count = columnProjectors.size();
+KeyValueSchemaBuilder builder = new KeyValueSchemaBuilder(0);
+expressions = new Expression[count];
+for (int i = 0; i < count; i++) {
+Expression expression = columnProjectors.get(i).getExpression();
+builder.addField(expression);
+expressions[i] = expression;
+}
+schema = builder.build();
+valueSet = ValueBitSet.newInstance(schema);
+}
+
+public TupleProjector(ProjectedPTableWrapper projected) {
+   List columns = projected.getTable().getColumns();
+   expressions = new Expression[columns.size() - 
projected.getTable().getPKColumns().size()];
+   // we do not count minNullableIndex for we might do later merge.
+   KeyValueSchemaBuilder builder = new KeyValueSchemaBuilder(0);
+   int i = 0;
+for (PColumn column : projected.getTable().getColumns()) {
+   if (!SchemaUtil.isPKColumn(column)) {
+   builder.addField(column);
+   expressions[i++] = 
projected.getSourceExpression(column);
+   }
+}
+schema = builder.build();
+valueSet = ValueBitSet.newInstance(schema);
+}
+
+public TupleProjector(KeyValueSchema schema, Expression[] expressions) {
+   this.schema = schema;
+   this.expressions = expressions;
+   this.valueSet = ValueBitSet.newInstance(schema);
+}
+
+public void setValueBitSet(ValueBitSet bitSet) {
+this.valueSet = bitSet;
+}
+
+public static void serializeProjectorIntoScan(Scan scan, TupleProjector 
projector) {
+ByteArrayOutputStream stream = new ByteArrayOutputStream();
+try {
+DataOutputSt

[4/5] git commit: Merge branch '4.0' of https://git-wip-us.apache.org/repos/asf/phoenix into 4.0

2014-11-01 Thread maryannxue
Merge branch '4.0' of https://git-wip-us.apache.org/repos/asf/phoenix into 4.0


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/e1377116
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/e1377116
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/e1377116

Branch: refs/heads/4.0
Commit: e13771165b9cf445a932e83d955055be24edcc5d
Parents: 301f87e 77f2405
Author: maryannxue 
Authored: Sat Nov 1 14:49:43 2014 -0400
Committer: maryannxue 
Committed: Sat Nov 1 14:49:43 2014 -0400

--
 CHANGES |  14 +
 bin/phoenix_utils.py|   2 +-
 bin/psql.py |   8 +-
 phoenix-assembly/pom.xml|  10 +-
 phoenix-core/pom.xml|  23 +-
 .../apache/phoenix/end2end/AlterTableIT.java|  22 +-
 .../end2end/BaseClientManagedTimeIT.java|  15 +-
 .../org/apache/phoenix/end2end/BaseQueryIT.java |   3 +-
 .../end2end/ClientTimeArithmeticQueryIT.java|  43 +++
 .../phoenix/end2end/InMemoryOrderByIT.java  |   4 +-
 .../org/apache/phoenix/end2end/QueryIT.java |  44 ++-
 .../apache/phoenix/end2end/ReverseScanIT.java   |   2 +-
 .../org/apache/phoenix/end2end/SequenceIT.java  |   7 +-
 .../end2end/SkipScanAfterManualSplitIT.java |   2 +-
 .../phoenix/end2end/SpooledOrderByIT.java   |   4 +-
 .../phoenix/end2end/StatsCollectorIT.java   |  55 ++-
 .../end2end/TenantSpecificTablesDDLIT.java  |  23 +-
 .../apache/phoenix/end2end/UpsertSelectIT.java  |   4 +-
 .../phoenix/end2end/index/LocalIndexIT.java | 176 +-
 .../phoenix/end2end/index/MutableIndexIT.java   |  15 +-
 .../apache/phoenix/trace/BaseTracingTestIT.java | 100 +++---
 .../phoenix/trace/DisableableMetricsWriter.java |  27 +-
 .../trace/Hadoop1TracingTestEnabler.java|  84 -
 .../apache/phoenix/trace/PhoenixMetricImpl.java |  44 ---
 .../phoenix/trace/PhoenixMetricRecordImpl.java  |  71 
 .../trace/PhoenixTableMetricsWriterIT.java  |  28 +-
 .../apache/phoenix/trace/PhoenixTagImpl.java|  29 +-
 .../phoenix/trace/PhoenixTraceReaderIT.java |  61 ++--
 .../phoenix/trace/PhoenixTracingEndToEndIT.java |  59 ++--
 .../apache/phoenix/trace/TracingTestUtil.java   |  31 ++
 .../IndexHalfStoreFileReaderGenerator.java  |  63 
 .../hbase/regionserver/LocalIndexSplitter.java  |  40 +++
 .../phoenix/compile/ExpressionCompiler.java |   2 +-
 .../phoenix/compile/ProjectionCompiler.java |  50 ++-
 .../coprocessor/MetaDataEndpointImpl.java   |  43 +--
 .../phoenix/coprocessor/MetaDataProtocol.java   |   2 +-
 .../UngroupedAggregateRegionObserver.java   |  21 +-
 .../coprocessor/generated/MetaDataProtos.java   | 351 +--
 .../coprocessor/generated/PTableProtos.java | 103 +-
 .../apache/phoenix/execute/BaseQueryPlan.java   |   6 +
 .../phoenix/filter/BooleanExpressionFilter.java |   6 +
 .../org/apache/phoenix/hbase/index/Indexer.java |   4 +-
 .../hbase/index/wal/IndexedKeyValue.java|  46 ++-
 .../TrackingParallelWriterIndexCommitter.java   |   2 +-
 .../apache/phoenix/iterate/ExplainTable.java|  17 +-
 .../phoenix/iterate/ParallelIterators.java  |   2 +-
 .../apache/phoenix/jdbc/PhoenixConnection.java  |   8 +-
 .../phoenix/jdbc/PhoenixDatabaseMetaData.java   |  55 ++-
 .../apache/phoenix/jdbc/PhoenixResultSet.java   |   5 -
 .../org/apache/phoenix/metrics/MetricInfo.java  |  51 +++
 .../org/apache/phoenix/metrics/Metrics.java |  66 
 .../java/org/apache/phoenix/parse/HintNode.java |   9 +-
 .../phoenix/query/ConnectionQueryServices.java  |   2 +-
 .../query/ConnectionQueryServicesImpl.java  |  20 +-
 .../query/ConnectionlessQueryServicesImpl.java  |   8 +-
 .../query/DelegateConnectionQueryServices.java  |  10 +-
 .../apache/phoenix/query/MetaDataMutated.java   |   2 +-
 .../org/apache/phoenix/query/QueryServices.java |   1 +
 .../phoenix/query/QueryServicesOptions.java |   5 +-
 .../apache/phoenix/schema/MetaDataClient.java   |  12 +-
 .../apache/phoenix/schema/PMetaDataImpl.java|  53 +--
 .../org/apache/phoenix/schema/PTableImpl.java   |   5 +-
 .../phoenix/schema/stats/PTableStats.java   |   7 +
 .../phoenix/schema/stats/PTableStatsImpl.java   |  12 +-
 .../schema/stats/StatisticsCollector.java   |  79 +++--
 .../phoenix/schema/stats/StatisticsScanner.java |   1 -
 .../phoenix/schema/stats/StatisticsUtil.java|   6 +-
 .../phoenix/schema/stats/StatisticsWriter.java  |  39 ++-
 .../phoenix/schema/tuple/ResultTuple.java   |   2 +-
 .../apache/phoenix/trace/MetricsInfoImpl.java   |  63 
 .../phoenix/trace/PhoenixMetricsSink.java   | 298 
 .../trace/PhoenixTableMetricsWriter.java| 278 ---
 .../apache/phoenix/trace/TraceMetricSource.java | 188 ++
 .../org/apache/phoenix/trace/Tra

[3/5] git commit: PHOENIX-944 Support derived tables in FROM clause that needs extra steps of client-side aggregation or other processing

2014-11-01 Thread maryannxue
PHOENIX-944 Support derived tables in FROM clause that needs extra steps of 
client-side aggregation or other processing


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/301f87ea
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/301f87ea
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/301f87ea

Branch: refs/heads/4.0
Commit: 301f87ea2d3f2f8749010592f225f71924ab3c16
Parents: f004e13
Author: maryannxue 
Authored: Thu Oct 23 20:26:17 2014 -0400
Committer: maryannxue 
Committed: Thu Oct 23 23:26:49 2014 -0400

--
 .../main/java/org/apache/phoenix/compile/QueryCompiler.java| 4 
 .../java/org/apache/phoenix/execute/ClientAggregatePlan.java   | 4 +++-
 .../org/apache/phoenix/iterate/LookAheadResultIterator.java| 6 +++---
 3 files changed, 10 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/301f87ea/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java 
b/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
index 0eafcdb..214330c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/QueryCompiler.java
@@ -43,6 +43,7 @@ import org.apache.phoenix.execute.ScanPlan;
 import org.apache.phoenix.execute.TupleProjectionPlan;
 import org.apache.phoenix.execute.TupleProjector;
 import org.apache.phoenix.expression.Expression;
+import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.expression.RowValueConstructorExpression;
 import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
 import org.apache.phoenix.iterate.ParallelIterators.ParallelIteratorFactory;
@@ -427,6 +428,9 @@ public class QueryCompiler {
 }
 
 if (innerPlan != null) {
+if (LiteralExpression.isTrue(where)) {
+where = null; // we do not pass "true" as filter
+}
 plan =  select.isAggregate() || select.isDistinct() ?
   new ClientAggregatePlan(context, select, tableRef, 
projector, limit, where, orderBy, groupBy, having, plan)
 : new ClientScanPlan(context, select, tableRef, projector, 
limit, where, orderBy, plan);

http://git-wip-us.apache.org/repos/asf/phoenix/blob/301f87ea/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java
index a9347e1..59aab2d 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/execute/ClientAggregatePlan.java
@@ -17,6 +17,8 @@
  */
 package org.apache.phoenix.execute;
 
+import static org.apache.phoenix.query.QueryConstants.*;
+
 import java.io.IOException;
 import java.sql.SQLException;
 import java.util.Collections;
@@ -210,7 +212,7 @@ public class ClientAggregatePlan extends 
ClientProcessingPlan {
 @Override
 protected ImmutableBytesWritable getGroupingKey(Tuple tuple,
 ImmutableBytesWritable ptr) throws SQLException {
-tuple.getKey(ptr);
+ptr.set(UNGROUPED_AGG_ROW_KEY);
 return ptr;
 }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/301f87ea/phoenix-core/src/main/java/org/apache/phoenix/iterate/LookAheadResultIterator.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/LookAheadResultIterator.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/LookAheadResultIterator.java
index 971b1a5..3293f65 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/LookAheadResultIterator.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/iterate/LookAheadResultIterator.java
@@ -25,9 +25,9 @@ import org.apache.phoenix.schema.tuple.Tuple;
 
 
 abstract public class LookAheadResultIterator implements PeekingResultIterator 
{
-public static LookAheadResultIterator wrap(final ResultIterator iterator) {
-if (iterator instanceof LookAheadResultIterator) {
-return (LookAheadResultIterator) iterator;
+public static PeekingResultIterator wrap(final ResultIterator iterator) {
+if (iterator instanceof PeekingResultIterator) {
+return (PeekingResultIterator) iterator;
 }
 
 return new LookAheadResultIterator() {



[5/5] git commit: PHOENIX-1399 Support cross joins and comma-separated table list

2014-11-01 Thread maryannxue
PHOENIX-1399 Support cross joins and comma-separated table list


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/91e29c60
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/91e29c60
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/91e29c60

Branch: refs/heads/4.0
Commit: 91e29c60d7433352de9a350b7cfde1c67ef952ac
Parents: e137711
Author: maryannxue 
Authored: Sat Nov 1 14:59:52 2014 -0400
Committer: maryannxue 
Committed: Sat Nov 1 14:59:52 2014 -0400

--
 .../org/apache/phoenix/end2end/HashJoinIT.java  |  70 +-
 phoenix-core/src/main/antlr3/PhoenixSQL.g   |  30 +--
 .../apache/phoenix/compile/DeleteCompiler.java  |   2 +-
 .../apache/phoenix/compile/FromCompiler.java|  10 +-
 .../apache/phoenix/compile/JoinCompiler.java| 231 ++-
 .../apache/phoenix/compile/QueryCompiler.java   |   4 +-
 .../phoenix/compile/StatementNormalizer.java|  12 +-
 .../phoenix/compile/SubqueryRewriter.java   |   6 +-
 .../phoenix/compile/SubselectRewriter.java  |   6 +-
 .../apache/phoenix/compile/UpsertCompiler.java  |   2 +-
 .../phoenix/exception/SQLExceptionCode.java |   1 +
 .../apache/phoenix/jdbc/PhoenixStatement.java   |   4 +-
 .../apache/phoenix/optimize/QueryOptimizer.java |   4 +-
 .../org/apache/phoenix/parse/JoinPartNode.java  |  53 -
 .../apache/phoenix/parse/ParseNodeFactory.java  |  21 +-
 .../apache/phoenix/parse/ParseNodeRewriter.java |  25 +-
 .../apache/phoenix/parse/SelectStatement.java   |  18 +-
 17 files changed, 239 insertions(+), 260 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/91e29c60/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 3850ac9..5190c18 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
@@ -41,7 +41,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
@@ -1810,13 +1809,22 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
 
 @Test
 public void testStarJoin() throws Exception {
-String[] query = new String[2];
+String[] query = new String[5];
 query[0] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = 
c.\"customer_id\" JOIN " 
 + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = i.\"item_id\" 
ORDER BY \"order_id\"";
-query[1] = "SELECT /*+ NO_STAR_JOIN*/ \"order_id\", c.name, i.name 
iname, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
+query[1] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o, " 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c, " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
+query[2] = "SELECT /*+ NO_STAR_JOIN*/ \"order_id\", c.name, i.name 
iname, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = 
c.\"customer_id\" JOIN " 
 + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = 
i.\"item_id\" ORDER BY \"order_id\"";
+query[3] = "SELECT /*+ NO_STAR_JOIN*/  \"order_id\", c.name, i.name 
iname, quantity, o.date FROM (" + JOIN_ORDER_TABLE_FULL_NAME + " o, " 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c), " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
+query[4] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o, (" 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c, " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i) WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
 Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
 Connection conn = DriverManager.getConnection(getUrl(), props);
 try {
@@ -1860,8 +1868,10 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
 
 assertFalse(rs.next());
   

git commit: PHOENIX-1399 Support cross joins and comma-separated table list

2014-11-01 Thread maryannxue
Repository: phoenix
Updated Branches:
  refs/heads/master 4de425131 -> bfc92b045


PHOENIX-1399 Support cross joins and comma-separated table list


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/bfc92b04
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/bfc92b04
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/bfc92b04

Branch: refs/heads/master
Commit: bfc92b045fb27b6b3cdd4ffd9b8d523afd0e88dd
Parents: 4de4251
Author: maryannxue 
Authored: Sat Nov 1 14:44:26 2014 -0400
Committer: maryannxue 
Committed: Sat Nov 1 14:44:26 2014 -0400

--
 .../org/apache/phoenix/end2end/HashJoinIT.java  |  70 +-
 phoenix-core/src/main/antlr3/PhoenixSQL.g   |  30 +--
 .../apache/phoenix/compile/DeleteCompiler.java  |   2 +-
 .../apache/phoenix/compile/FromCompiler.java|  10 +-
 .../apache/phoenix/compile/JoinCompiler.java| 231 ++-
 .../apache/phoenix/compile/QueryCompiler.java   |   4 +-
 .../phoenix/compile/StatementNormalizer.java|  12 +-
 .../phoenix/compile/SubqueryRewriter.java   |   6 +-
 .../phoenix/compile/SubselectRewriter.java  |   6 +-
 .../apache/phoenix/compile/UpsertCompiler.java  |   2 +-
 .../phoenix/exception/SQLExceptionCode.java |   1 +
 .../apache/phoenix/jdbc/PhoenixStatement.java   |   4 +-
 .../apache/phoenix/optimize/QueryOptimizer.java |   4 +-
 .../org/apache/phoenix/parse/JoinPartNode.java  |  53 -
 .../apache/phoenix/parse/ParseNodeFactory.java  |  21 +-
 .../apache/phoenix/parse/ParseNodeRewriter.java |  25 +-
 .../apache/phoenix/parse/SelectStatement.java   |  18 +-
 17 files changed, 239 insertions(+), 260 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/bfc92b04/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 3850ac9..5190c18 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
@@ -41,7 +41,6 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
@@ -1810,13 +1809,22 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
 
 @Test
 public void testStarJoin() throws Exception {
-String[] query = new String[2];
+String[] query = new String[5];
 query[0] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = 
c.\"customer_id\" JOIN " 
 + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = i.\"item_id\" 
ORDER BY \"order_id\"";
-query[1] = "SELECT /*+ NO_STAR_JOIN*/ \"order_id\", c.name, i.name 
iname, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
+query[1] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o, " 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c, " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
+query[2] = "SELECT /*+ NO_STAR_JOIN*/ \"order_id\", c.name, i.name 
iname, quantity, o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o JOIN " 
 + JOIN_CUSTOMER_TABLE_FULL_NAME + " c ON o.\"customer_id\" = 
c.\"customer_id\" JOIN " 
 + JOIN_ITEM_TABLE_FULL_NAME + " i ON o.\"item_id\" = 
i.\"item_id\" ORDER BY \"order_id\"";
+query[3] = "SELECT /*+ NO_STAR_JOIN*/  \"order_id\", c.name, i.name 
iname, quantity, o.date FROM (" + JOIN_ORDER_TABLE_FULL_NAME + " o, " 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c), " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
+query[4] = "SELECT \"order_id\", c.name, i.name iname, quantity, 
o.date FROM " + JOIN_ORDER_TABLE_FULL_NAME + " o, (" 
++ JOIN_CUSTOMER_TABLE_FULL_NAME + " c, " 
++ JOIN_ITEM_TABLE_FULL_NAME + " i) WHERE o.\"item_id\" = 
i.\"item_id\" AND o.\"customer_id\" = c.\"customer_id\" ORDER BY \"order_id\"";
 Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
 Connection conn = DriverManager.getConnection(getUrl(), props);
 try {
@@ -1860,8 +1868,10 @@ public class HashJoin