This is an automated email from the ASF dual-hosted git repository. mihir6692 pushed a commit to branch 4.x-HBase-1.5 in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/4.x-HBase-1.5 by this push: new 5973ba6 PHOENIX-4306 Add more tests for DESC sort order 5973ba6 is described below commit 5973ba68efd2603dfac4781d2331c3b1a56b66db Author: Viraj Jasani <virajjasani...@gmail.com> AuthorDate: Thu Oct 10 14:45:30 2019 +0530 PHOENIX-4306 Add more tests for DESC sort order --- .../apache/phoenix/end2end/DescOrderKeysIT.java | 441 +++++++++++++++++++++ 1 file changed, 441 insertions(+) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/DescOrderKeysIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DescOrderKeysIT.java new file mode 100644 index 0000000..a6ecfd7 --- /dev/null +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/DescOrderKeysIT.java @@ -0,0 +1,441 @@ +/* + * 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.end2end; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +import org.apache.phoenix.compile.QueryPlan; +import org.apache.phoenix.jdbc.PhoenixStatement; +import org.junit.Assert; +import org.junit.Test; + +public class DescOrderKeysIT extends ParallelStatsDisabledIT { + + @Test + public void testVarCharDescOrderPKs() throws Exception { + final String tableName = generateUniqueName(); + + try (Connection conn = DriverManager.getConnection(getUrl())) { + conn.setAutoCommit(true); + final Statement stmt = conn.createStatement(); + + stmt.execute("CREATE TABLE " + tableName + + " (COL1 VARCHAR, COL2 VARCHAR CONSTRAINT PK PRIMARY KEY (COL1 DESC, COL2)) "); + + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('h1uniq1', 'val1')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('41efh', 'val2')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('c49ghd', 'val3')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('4232jfjg', 'val4')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('zsw4tg', 'val5')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('93hgwef', 'val6')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2) VALUES ('3jfytw', 'val7')"); + + final String sql = "select COL1, COL2 from " + tableName; + + ResultSet rs = stmt.executeQuery(sql); + Assert.assertTrue(rs.next()); + + QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().size()); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().get(0).size()); + + Assert.assertEquals("zsw4tg", rs.getString(1)); + Assert.assertEquals("val5", rs.getString(2)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("h1uniq1", rs.getString(1)); + Assert.assertEquals("val1", rs.getString(2)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("c49ghd", rs.getString(1)); + Assert.assertEquals("val3", rs.getString(2)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("93hgwef", rs.getString(1)); + Assert.assertEquals("val6", rs.getString(2)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("4232jfjg", rs.getString(1)); + Assert.assertEquals("val4", rs.getString(2)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("41efh", rs.getString(1)); + Assert.assertEquals("val2", rs.getString(2)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("3jfytw", rs.getString(1)); + Assert.assertEquals("val7", rs.getString(2)); + Assert.assertFalse(rs.next()); + } + } + + @Test + public void testVarCharDescOrderMultiplePKs() throws Exception { + final String tableName = generateUniqueName(); + + try (Connection conn = DriverManager.getConnection(getUrl())) { + conn.setAutoCommit(true); + final Statement stmt = conn.createStatement(); + + stmt.execute("CREATE TABLE " + tableName + + " (COL1 VARCHAR, COL2 VARCHAR, COL3 VARCHAR CONSTRAINT " + + "PK PRIMARY KEY (COL1 DESC, COL2 DESC, COL3)) "); + + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('h1uniq1', 'key1', 'val1')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('41efh', 'key2', 'val2')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('c49ghd', 'key3', 'val3')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('zsw4tg', 'key5', 'val5')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('zsw4tg', 'key4', 'val4')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('h1uniq1', 'key6', 'val6')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('93hgwef', 'key7', 'val7')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('3jfytw', 'key8', 'val8')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "('4232jfjg', 'key9', 'val9')"); + + final String sql = "select COL1, COL2, COL3 from " + tableName; + + ResultSet rs = stmt.executeQuery(sql); + Assert.assertTrue(rs.next()); + + QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().size()); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().get(0).size()); + + Assert.assertEquals("zsw4tg", rs.getString(1)); + Assert.assertEquals("key5", rs.getString(2)); + Assert.assertEquals("val5", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("zsw4tg", rs.getString(1)); + Assert.assertEquals("key4", rs.getString(2)); + Assert.assertEquals("val4", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("h1uniq1", rs.getString(1)); + Assert.assertEquals("key6", rs.getString(2)); + Assert.assertEquals("val6", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("h1uniq1", rs.getString(1)); + Assert.assertEquals("key1", rs.getString(2)); + Assert.assertEquals("val1", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("c49ghd", rs.getString(1)); + Assert.assertEquals("key3", rs.getString(2)); + Assert.assertEquals("val3", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("93hgwef", rs.getString(1)); + Assert.assertEquals("key7", rs.getString(2)); + Assert.assertEquals("val7", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("4232jfjg", rs.getString(1)); + Assert.assertEquals("key9", rs.getString(2)); + Assert.assertEquals("val9", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("41efh", rs.getString(1)); + Assert.assertEquals("key2", rs.getString(2)); + Assert.assertEquals("val2", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals("3jfytw", rs.getString(1)); + Assert.assertEquals("key8", rs.getString(2)); + Assert.assertEquals("val8", rs.getString(3)); + Assert.assertFalse(rs.next()); + } + } + + @Test + public void testIntDescOrderMultiplePKs() throws Exception { + final String tableName = generateUniqueName(); + + try (Connection conn = DriverManager.getConnection(getUrl())) { + conn.setAutoCommit(true); + final Statement stmt = conn.createStatement(); + + stmt.execute("CREATE TABLE " + tableName + + " (COL1 INTEGER NOT NULL, COL2 INTEGER NOT NULL, COL3 VARCHAR NOT NULL CONSTRAINT " + + "PK PRIMARY KEY (COL1 DESC, COL2 DESC, COL3)) "); + + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(1234, 3957, 'val1')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(2453, 234, 'val2')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(3463, 345561, 'val3')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(34534, 345657, 'val4')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(2453, 92374, 'val5')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375, 11037, 'val6')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375, 455, 'val7')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375, 7712, 'val8')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(1234, 3956, 'val9')"); + + final String sql = "select COL1, COL2, COL3 from " + tableName; + + ResultSet rs = stmt.executeQuery(sql); + Assert.assertTrue(rs.next()); + + QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().size()); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().get(0).size()); + + Assert.assertEquals(34534, rs.getInt(1)); + Assert.assertEquals(345657, rs.getInt(2)); + Assert.assertEquals("val4", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(9375, rs.getInt(1)); + Assert.assertEquals(11037, rs.getInt(2)); + Assert.assertEquals("val6", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(9375, rs.getInt(1)); + Assert.assertEquals(7712, rs.getInt(2)); + Assert.assertEquals("val8", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(9375, rs.getInt(1)); + Assert.assertEquals(455, rs.getInt(2)); + Assert.assertEquals("val7", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(3463, rs.getInt(1)); + Assert.assertEquals(345561, rs.getInt(2)); + Assert.assertEquals("val3", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(2453, rs.getInt(1)); + Assert.assertEquals(92374, rs.getInt(2)); + Assert.assertEquals("val5", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(2453, rs.getInt(1)); + Assert.assertEquals(234, rs.getInt(2)); + Assert.assertEquals("val2", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(1234, rs.getInt(1)); + Assert.assertEquals(3957, rs.getInt(2)); + Assert.assertEquals("val1", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(1234, rs.getInt(1)); + Assert.assertEquals(3956, rs.getInt(2)); + Assert.assertEquals("val9", rs.getString(3)); + Assert.assertFalse(rs.next()); + } + } + + @Test + public void testDoubleDescOrderMultiplePKs() throws Exception { + final String tableName = generateUniqueName(); + + try (Connection conn = DriverManager.getConnection(getUrl())) { + conn.setAutoCommit(true); + final Statement stmt = conn.createStatement(); + + stmt.execute("CREATE TABLE " + tableName + + " (COL1 DOUBLE NOT NULL, COL2 DOUBLE NOT NULL, COL3 VARCHAR NOT NULL CONSTRAINT " + + "PK PRIMARY KEY (COL1 DESC, COL2 DESC, COL3)) "); + + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(1234.39, 3957.124, 'val1')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(2453.97, 234.112, 'val2')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(3463.384, 345561.124, 'val3')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(34534.9191, 345657.913, 'val4')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(2453.89, 92374.11, 'val5')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375.23, 11037.729, 'val6')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375.23, 11037.8, 'val7')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375.23, 11037.72888, 'val8')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(1234.39, 3957.123999, 'val9')"); + + final String sql = "select COL1, COL2, COL3 from " + tableName; + + ResultSet rs = stmt.executeQuery(sql); + Assert.assertTrue(rs.next()); + + QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().size()); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().get(0).size()); + + Assert.assertEquals(34534.9191, rs.getDouble(1), 0.0); + Assert.assertEquals(345657.913, rs.getDouble(2), 0.0); + Assert.assertEquals("val4", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(9375.23, rs.getDouble(1), 0.0); + Assert.assertEquals(11037.8, rs.getDouble(2), 0.0); + Assert.assertEquals("val7", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(9375.23, rs.getDouble(1), 0.0); + Assert.assertEquals(11037.729, rs.getDouble(2), 0.0); + Assert.assertEquals("val6", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(9375.23, rs.getDouble(1), 0.0); + Assert.assertEquals(11037.72888, rs.getDouble(2), 0.0); + Assert.assertEquals("val8", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(3463.384, rs.getDouble(1), 0.0); + Assert.assertEquals(345561.124, rs.getDouble(2), 0.0); + Assert.assertEquals("val3", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(2453.97, rs.getDouble(1), 0.0); + Assert.assertEquals(234.112, rs.getDouble(2), 0.0); + Assert.assertEquals("val2", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(2453.89, rs.getDouble(1), 0.0); + Assert.assertEquals(92374.11, rs.getDouble(2), 0.0); + Assert.assertEquals("val5", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(1234.39, rs.getDouble(1), 0.0); + Assert.assertEquals(3957.124, rs.getDouble(2), 0.0); + Assert.assertEquals("val1", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(1234.39, rs.getDouble(1), 0.0); + Assert.assertEquals(3957.123999, rs.getDouble(2), 0.0); + Assert.assertEquals("val9", rs.getString(3)); + Assert.assertFalse(rs.next()); + } + } + + @Test + public void testDecimalDescOrderMultiplePKs() throws Exception { + final String tableName = generateUniqueName(); + + try (Connection conn = DriverManager.getConnection(getUrl())) { + conn.setAutoCommit(true); + final Statement stmt = conn.createStatement(); + + stmt.execute("CREATE TABLE " + tableName + + " (COL1 DECIMAL NOT NULL, COL2 DECIMAL NOT NULL, COL3 VARCHAR NOT NULL CONSTRAINT " + + "PK PRIMARY KEY (COL1 DESC, COL2 DESC, COL3)) "); + + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(1234.39, 3957.124, 'val1')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(2453.97, 234.112, 'val2')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(3463.384, 345561.124, 'val3')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(34534.9191, 345657.913, 'val4')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(2453.89, 92374.11, 'val5')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375.23, 11037.729, 'val6')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375.23, 11037.8, 'val7')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(9375.23, 11037.72888, 'val8')"); + stmt.execute("UPSERT INTO " + tableName + " (COL1, COL2, COL3) VALUES " + + "(1234.39, 3957.123999, 'val9')"); + + final String sql = "select COL1, COL2, COL3 from " + tableName; + + ResultSet rs = stmt.executeQuery(sql); + Assert.assertTrue(rs.next()); + + QueryPlan plan = stmt.unwrap(PhoenixStatement.class).getQueryPlan(); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().size()); + Assert.assertEquals("Expected a single scan ", 1, plan.getScans().get(0).size()); + + Assert.assertEquals(BigDecimal.valueOf(34534.9191), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(345657.913), rs.getBigDecimal(2)); + Assert.assertEquals("val4", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(9375.23), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(11037.8), rs.getBigDecimal(2)); + Assert.assertEquals("val7", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(9375.23), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(11037.729), rs.getBigDecimal(2)); + Assert.assertEquals("val6", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(9375.23), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(11037.72888), rs.getBigDecimal(2)); + Assert.assertEquals("val8", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(3463.384), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(345561.124), rs.getBigDecimal(2)); + Assert.assertEquals("val3", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(2453.97), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(234.112), rs.getBigDecimal(2)); + Assert.assertEquals("val2", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(2453.89), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(92374.11), rs.getBigDecimal(2)); + Assert.assertEquals("val5", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(1234.39), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(3957.124), rs.getBigDecimal(2)); + Assert.assertEquals("val1", rs.getString(3)); + Assert.assertTrue(rs.next()); + + Assert.assertEquals(BigDecimal.valueOf(1234.39), rs.getBigDecimal(1)); + Assert.assertEquals(BigDecimal.valueOf(3957.123999), rs.getBigDecimal(2)); + Assert.assertEquals("val9", rs.getString(3)); + Assert.assertFalse(rs.next()); + } + } + + +}