[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table

2016-05-16 Thread ankit
Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-0.98 ea93058f4 -> 4837f1ff9


PHOENIX-2884 Fix EXPLAIN plan for offset on salted table


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

Branch: refs/heads/4.x-HBase-0.98
Commit: a9934ef90aa12e133a5d609e9c6df57e670e5284
Parents: ea93058
Author: Ankit Singhal 
Authored: Mon May 16 12:43:09 2016 +0530
Committer: Ankit Singhal 
Committed: Mon May 16 12:43:09 2016 +0530

--
 .../phoenix/end2end/QueryWithOffsetIT.java  | 25 
 .../phoenix/iterate/BaseResultIterators.java|  4 +---
 2 files changed, 21 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/a9934ef9/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
--
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
index 7f360de..f4b3440 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
@@ -38,6 +38,7 @@ import java.util.Properties;
 
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -50,16 +51,18 @@ import com.google.common.collect.Maps;
 @RunWith(Parameterized.class)
 public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT {
 
-private String tableName;
+private String tableName = "T";
 private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", 
"i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
 private final String ddl;
+private final boolean isSalted;
 
 public QueryWithOffsetIT(String preSplit) {
 this.tableName = tableName + "_" + preSplit.charAt(2);
 this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" 
+ "k1 INTEGER NOT NULL,\n"
 + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 
VARCHAR,\n"
 + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit;
+this.isSalted = preSplit.startsWith(" SALT_BUCKETS");
 }
 
 @BeforeClass
@@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends 
BaseOwnClusterHBaseManagedTimeIT {
 updateStatistics(conn);
 String query = "SELECT t_id from " + tableName + " offset " + offset;
 ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-rs.next();
-rs.next();
-rs.next();
-assertEquals("SERVER OFFSET " + offset, rs.getString(1));
+if(!isSalted){
+assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "SERVER OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}else{
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 rs = conn.createStatement().executeQuery(query);
 int i = 0;
 while (i++ < strings.length - offset) {
 assertTrue(rs.next());
 assertEquals(strings[offset + i - 1], rs.getString(1));
 }
+query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + 
offset;
+rs = conn.createStatement().executeQuery("EXPLAIN " + query);
+if (!isSalted) {
+assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+} else {
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 conn.close();
 }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/a9934ef9/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
 

[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table

2016-05-16 Thread ankit
Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-1.0 588eb1732 -> f30442226


PHOENIX-2884 Fix EXPLAIN plan for offset on salted table


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

Branch: refs/heads/4.x-HBase-1.0
Commit: c345e09c889d57a83856db4a65c7c0731f6ff117
Parents: 588eb17
Author: Ankit Singhal 
Authored: Mon May 16 12:36:50 2016 +0530
Committer: Ankit Singhal 
Committed: Mon May 16 12:36:50 2016 +0530

--
 .../phoenix/end2end/QueryWithOffsetIT.java  | 25 
 .../phoenix/iterate/BaseResultIterators.java|  4 +---
 2 files changed, 21 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/c345e09c/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
--
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
index 7f360de..f4b3440 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
@@ -38,6 +38,7 @@ import java.util.Properties;
 
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -50,16 +51,18 @@ import com.google.common.collect.Maps;
 @RunWith(Parameterized.class)
 public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT {
 
-private String tableName;
+private String tableName = "T";
 private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", 
"i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
 private final String ddl;
+private final boolean isSalted;
 
 public QueryWithOffsetIT(String preSplit) {
 this.tableName = tableName + "_" + preSplit.charAt(2);
 this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" 
+ "k1 INTEGER NOT NULL,\n"
 + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 
VARCHAR,\n"
 + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit;
+this.isSalted = preSplit.startsWith(" SALT_BUCKETS");
 }
 
 @BeforeClass
@@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends 
BaseOwnClusterHBaseManagedTimeIT {
 updateStatistics(conn);
 String query = "SELECT t_id from " + tableName + " offset " + offset;
 ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-rs.next();
-rs.next();
-rs.next();
-assertEquals("SERVER OFFSET " + offset, rs.getString(1));
+if(!isSalted){
+assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "SERVER OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}else{
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 rs = conn.createStatement().executeQuery(query);
 int i = 0;
 while (i++ < strings.length - offset) {
 assertTrue(rs.next());
 assertEquals(strings[offset + i - 1], rs.getString(1));
 }
+query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + 
offset;
+rs = conn.createStatement().executeQuery("EXPLAIN " + query);
+if (!isSalted) {
+assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+} else {
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 conn.close();
 }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/c345e09c/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
 

[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table

2016-05-16 Thread ankit
Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-1.1 52da01463 -> 9c3c849a1


PHOENIX-2884 Fix EXPLAIN plan for offset on salted table


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

Branch: refs/heads/4.x-HBase-1.1
Commit: 156c356669a5e8ecfb31768e62d9990b459bf31c
Parents: 52da014
Author: Ankit Singhal 
Authored: Mon May 16 12:19:20 2016 +0530
Committer: Ankit Singhal 
Committed: Mon May 16 12:19:20 2016 +0530

--
 .../phoenix/end2end/QueryWithOffsetIT.java  | 25 
 .../phoenix/iterate/BaseResultIterators.java|  4 +---
 2 files changed, 21 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/156c3566/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
--
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
index dd21f31..c5b6959 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
@@ -38,6 +38,7 @@ import java.util.Properties;
 
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -50,16 +51,18 @@ import com.google.common.collect.Maps;
 @RunWith(Parameterized.class)
 public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT {
 
-private String tableName;
+private String tableName = "T";
 private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", 
"i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
 private final String ddl;
+private final boolean isSalted;
 
 public QueryWithOffsetIT(String preSplit) {
 this.tableName=tableName + "_" + preSplit.charAt(2);
 this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" 
+ "k1 INTEGER NOT NULL,\n"
 + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 
VARCHAR,\n"
 + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit;
+this.isSalted = preSplit.startsWith(" SALT_BUCKETS");
 }
 
 @BeforeClass
@@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends 
BaseOwnClusterHBaseManagedTimeIT {
 updateStatistics(conn);
 String query = "SELECT t_id from " + tableName + " offset " + offset;
 ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-rs.next();
-rs.next();
-rs.next();
-assertEquals("SERVER OFFSET " + offset, rs.getString(1));
+if(!isSalted){
+assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "SERVER OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}else{
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 rs = conn.createStatement().executeQuery(query);
 int i = 0;
 while (i++ < strings.length - offset) {
 assertTrue(rs.next());
 assertEquals(strings[offset + i - 1], rs.getString(1));
 }
+query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + 
offset;
+rs = conn.createStatement().executeQuery("EXPLAIN " + query);
+if (!isSalted) {
+assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+} else {
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 conn.close();
 }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/156c3566/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
 

[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table

2016-05-16 Thread ankit
Repository: phoenix
Updated Branches:
  refs/heads/master 98e783cf6 -> 5d641ad34


PHOENIX-2884 Fix EXPLAIN plan for offset on salted table


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

Branch: refs/heads/master
Commit: 33fb201ebe46ba90f81658ef9b487f3b74070a4a
Parents: 98e783c
Author: Ankit Singhal 
Authored: Mon May 16 12:16:21 2016 +0530
Committer: Ankit Singhal 
Committed: Mon May 16 12:16:21 2016 +0530

--
 .../phoenix/end2end/QueryWithOffsetIT.java  | 25 
 .../phoenix/iterate/BaseResultIterators.java|  4 +---
 2 files changed, 21 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/phoenix/blob/33fb201e/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
--
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
index dd21f31..c5b6959 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java
@@ -38,6 +38,7 @@ import java.util.Properties;
 
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.PropertiesUtil;
+import org.apache.phoenix.util.QueryUtil;
 import org.apache.phoenix.util.ReadOnlyProps;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -50,16 +51,18 @@ import com.google.common.collect.Maps;
 @RunWith(Parameterized.class)
 public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT {
 
-private String tableName;
+private String tableName = "T";
 private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", 
"i", "j", "k", "l", "m", "n", "o", "p",
 "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
 private final String ddl;
+private final boolean isSalted;
 
 public QueryWithOffsetIT(String preSplit) {
 this.tableName=tableName + "_" + preSplit.charAt(2);
 this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" 
+ "k1 INTEGER NOT NULL,\n"
 + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 
VARCHAR,\n"
 + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit;
+this.isSalted = preSplit.startsWith(" SALT_BUCKETS");
 }
 
 @BeforeClass
@@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends 
BaseOwnClusterHBaseManagedTimeIT {
 updateStatistics(conn);
 String query = "SELECT t_id from " + tableName + " offset " + offset;
 ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query);
-rs.next();
-rs.next();
-rs.next();
-assertEquals("SERVER OFFSET " + offset, rs.getString(1));
+if(!isSalted){
+assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "SERVER OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}else{
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER FILTER BY FIRST KEY ONLY\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 rs = conn.createStatement().executeQuery(query);
 int i = 0;
 while (i++ < strings.length - offset) {
 assertTrue(rs.next());
 assertEquals(strings[offset + i - 1], rs.getString(1));
 }
+query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + 
offset;
+rs = conn.createStatement().executeQuery("EXPLAIN " + query);
+if (!isSalted) {
+assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+} else {
+assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + "
SERVER SORTED BY [C2.V1]\n"
++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, 
QueryUtil.getExplainPlan(rs));
+}
 conn.close();
 }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/33fb201e/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
--
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java