[09/12] phoenix git commit: PHOENIX-2160 - Projection of specific array index does not work (Dumindu Buddhika)
PHOENIX-2160 - Projection of specific array index does not work (Dumindu Buddhika) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/7d7c2178 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/7d7c2178 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/7d7c2178 Branch: refs/heads/calcite Commit: 7d7c21786f4c1224027aec05a9b72411a3a1c07b Parents: ed3f3bb Author: ramkrishnaAuthored: Wed Sep 2 14:40:49 2015 +0530 Committer: ramkrishna Committed: Wed Sep 2 14:40:49 2015 +0530 -- .../org/apache/phoenix/end2end/ArrayIT.java | 441 +++ .../phoenix/compile/ProjectionCompiler.java | 130 -- .../apache/phoenix/compile/RowProjector.java| 4 +- .../coprocessor/BaseScannerRegionObserver.java | 15 +- .../expression/ProjectedColumnExpression.java | 7 +- .../visitor/CloneExpressionVisitor.java | 47 +- .../apache/phoenix/iterate/ExplainTable.java| 3 + .../phoenix/compile/QueryCompilerTest.java | 77 .../expression/ArithmeticOperationTest.java | 8 +- 9 files changed, 660 insertions(+), 72 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d7c2178/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java index 800a7b4..b7a2ad2 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java @@ -2238,4 +2238,445 @@ public class ArrayIT extends BaseClientManagedTimeIT { rs = stmt.executeQuery(); assertTrue(rs.next()); } + +@Test +public void testServerArrayElementProjection1() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1] FROM a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}), rs.getArray(1)); +assertEquals(1, rs.getInt(2)); +assertEquals("a", rs.getString(3)); +} + +@Test +public void testServerArrayElementProjection2() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY, arr3 INTEGER ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'], ARRAY[2, 3])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1], arr3[1] from a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}), rs.getArray(1)); +assertEquals(1, rs.getInt(2)); +assertEquals("a", rs.getString(3)); +assertEquals(2, rs.getInt(4)); +} + +@Test +public void testServerArrayElementProjection3() throws SQLException { +long ts =
phoenix git commit: PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika)
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-1.0 92d01e116 -> 4fa725937 PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/4fa72593 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/4fa72593 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/4fa72593 Branch: refs/heads/4.x-HBase-1.0 Commit: 4fa72593727e80790d85a12125382cafd62b85a3 Parents: 92d01e1 Author: ramkrishnaAuthored: Fri Sep 4 11:11:55 2015 +0530 Committer: ramkrishna Committed: Fri Sep 4 11:11:55 2015 +0530 -- .../org/apache/phoenix/end2end/ArrayIT.java | 441 +++ .../phoenix/compile/ProjectionCompiler.java | 130 -- .../apache/phoenix/compile/RowProjector.java| 4 +- .../coprocessor/BaseScannerRegionObserver.java | 15 +- .../expression/ProjectedColumnExpression.java | 7 +- .../visitor/CloneExpressionVisitor.java | 47 +- .../CloneNonDeterministicExpressionVisitor.java | 30 ++ .../ProjectedColumnExpressionVisitor.java | 25 ++ .../ReplaceArrayFunctionExpressionVisitor.java | 46 ++ .../apache/phoenix/iterate/ExplainTable.java| 3 + .../phoenix/compile/QueryCompilerTest.java | 77 .../expression/ArithmeticOperationTest.java | 8 +- 12 files changed, 761 insertions(+), 72 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/4fa72593/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java index 800a7b4..b7a2ad2 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java @@ -2238,4 +2238,445 @@ public class ArrayIT extends BaseClientManagedTimeIT { rs = stmt.executeQuery(); assertTrue(rs.next()); } + +@Test +public void testServerArrayElementProjection1() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1] FROM a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}), rs.getArray(1)); +assertEquals(1, rs.getInt(2)); +assertEquals("a", rs.getString(3)); +} + +@Test +public void testServerArrayElementProjection2() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY, arr3 INTEGER ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'], ARRAY[2, 3])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1], arr3[1] from a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}),
phoenix git commit: PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika)
Repository: phoenix Updated Branches: refs/heads/4.5-HBase-1.0 4d809a2d2 -> 7d5e3640d PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/7d5e3640 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/7d5e3640 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/7d5e3640 Branch: refs/heads/4.5-HBase-1.0 Commit: 7d5e3640d712fb870ee32e18c8b5e9bcb5beabb4 Parents: 4d809a2 Author: ramkrishnaAuthored: Fri Sep 4 11:16:27 2015 +0530 Committer: ramkrishna Committed: Fri Sep 4 11:16:27 2015 +0530 -- .../org/apache/phoenix/end2end/ArrayIT.java | 441 +++ .../phoenix/compile/ProjectionCompiler.java | 130 -- .../apache/phoenix/compile/RowProjector.java| 4 +- .../coprocessor/BaseScannerRegionObserver.java | 15 +- .../expression/ProjectedColumnExpression.java | 7 +- .../visitor/CloneExpressionVisitor.java | 47 +- .../CloneNonDeterministicExpressionVisitor.java | 30 ++ .../ProjectedColumnExpressionVisitor.java | 25 ++ .../ReplaceArrayFunctionExpressionVisitor.java | 46 ++ .../apache/phoenix/iterate/ExplainTable.java| 3 + .../phoenix/compile/QueryCompilerTest.java | 77 .../expression/ArithmeticOperationTest.java | 8 +- 12 files changed, 761 insertions(+), 72 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/7d5e3640/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java index 800a7b4..b7a2ad2 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java @@ -2238,4 +2238,445 @@ public class ArrayIT extends BaseClientManagedTimeIT { rs = stmt.executeQuery(); assertTrue(rs.next()); } + +@Test +public void testServerArrayElementProjection1() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1] FROM a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}), rs.getArray(1)); +assertEquals(1, rs.getInt(2)); +assertEquals("a", rs.getString(3)); +} + +@Test +public void testServerArrayElementProjection2() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY, arr3 INTEGER ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'], ARRAY[2, 3])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1], arr3[1] from a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}),
phoenix git commit: PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika)
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-0.98 c261ea3ac -> 9ab693258 PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/9ab69325 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/9ab69325 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/9ab69325 Branch: refs/heads/4.x-HBase-0.98 Commit: 9ab69325830792efcba314ee4256505d5a7f46d9 Parents: c261ea3 Author: ramkrishnaAuthored: Fri Sep 4 10:50:13 2015 +0530 Committer: ramkrishna Committed: Fri Sep 4 10:50:13 2015 +0530 -- .../org/apache/phoenix/end2end/ArrayIT.java | 441 +++ .../phoenix/compile/ProjectionCompiler.java | 130 -- .../apache/phoenix/compile/RowProjector.java| 4 +- .../coprocessor/BaseScannerRegionObserver.java | 15 +- .../expression/ProjectedColumnExpression.java | 7 +- .../visitor/CloneExpressionVisitor.java | 47 +- .../CloneNonDeterministicExpressionVisitor.java | 30 ++ .../ProjectedColumnExpressionVisitor.java | 25 ++ .../ReplaceArrayFunctionExpressionVisitor.java | 46 ++ .../apache/phoenix/iterate/ExplainTable.java| 3 + .../phoenix/compile/QueryCompilerTest.java | 77 .../expression/ArithmeticOperationTest.java | 8 +- 12 files changed, 761 insertions(+), 72 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/9ab69325/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java index 800a7b4..b7a2ad2 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java @@ -2238,4 +2238,445 @@ public class ArrayIT extends BaseClientManagedTimeIT { rs = stmt.executeQuery(); assertTrue(rs.next()); } + +@Test +public void testServerArrayElementProjection1() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1] FROM a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}), rs.getArray(1)); +assertEquals(1, rs.getInt(2)); +assertEquals("a", rs.getString(3)); +} + +@Test +public void testServerArrayElementProjection2() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY, arr3 INTEGER ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'], ARRAY[2, 3])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1], arr3[1] from a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}),
phoenix git commit: PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika)
Repository: phoenix Updated Branches: refs/heads/4.5-HBase-0.98 1aa04df62 -> b4a1ba82c PHOENIX-2160 Projection of specific array index does not work (Dumindu Buddhika) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b4a1ba82 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b4a1ba82 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b4a1ba82 Branch: refs/heads/4.5-HBase-0.98 Commit: b4a1ba82ce432074c261a8bd50f30b9bad4945c7 Parents: 1aa04df Author: ramkrishnaAuthored: Fri Sep 4 11:19:30 2015 +0530 Committer: ramkrishna Committed: Fri Sep 4 11:19:30 2015 +0530 -- .../org/apache/phoenix/end2end/ArrayIT.java | 441 +++ .../phoenix/compile/ProjectionCompiler.java | 130 -- .../apache/phoenix/compile/RowProjector.java| 4 +- .../coprocessor/BaseScannerRegionObserver.java | 15 +- .../expression/ProjectedColumnExpression.java | 7 +- .../visitor/CloneExpressionVisitor.java | 47 +- .../CloneNonDeterministicExpressionVisitor.java | 30 ++ .../ProjectedColumnExpressionVisitor.java | 25 ++ .../ReplaceArrayFunctionExpressionVisitor.java | 46 ++ .../apache/phoenix/iterate/ExplainTable.java| 3 + .../phoenix/compile/QueryCompilerTest.java | 77 .../expression/ArithmeticOperationTest.java | 8 +- 12 files changed, 761 insertions(+), 72 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/b4a1ba82/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java index 800a7b4..b7a2ad2 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java @@ -2238,4 +2238,445 @@ public class ArrayIT extends BaseClientManagedTimeIT { rs = stmt.executeQuery(); assertTrue(rs.next()); } + +@Test +public void testServerArrayElementProjection1() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1] FROM a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}), rs.getArray(1)); +assertEquals(1, rs.getInt(2)); +assertEquals("a", rs.getString(3)); +} + +@Test +public void testServerArrayElementProjection2() throws SQLException { +long ts = nextTimestamp(); +Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10)); +Connection conn = DriverManager.getConnection(getUrl(), props); +String ddl = "CREATE TABLE a (p INTEGER PRIMARY KEY, arr1 INTEGER ARRAY, arr2 VARCHAR ARRAY, arr3 INTEGER ARRAY)"; +conn.createStatement().execute(ddl); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30)); +conn = DriverManager.getConnection(getUrl(), props); +PreparedStatement stmt = conn.prepareStatement("UPSERT INTO a VALUES (1, ARRAY[1, 2], ARRAY['a', 'b'], ARRAY[2, 3])"); +stmt.execute(); +conn.commit(); +conn.close(); + +props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40)); +conn = DriverManager.getConnection(getUrl(), props); +ResultSet rs; +stmt = conn.prepareStatement("SELECT arr1, arr1[1], arr2[1], arr3[1] from a"); +rs = stmt.executeQuery(); +assertTrue(rs.next()); +assertEquals(conn.createArrayOf("INTEGER", new Integer[]{1, 2}),