You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ja...@apache.org on 2014/03/12 23:39:54 UTC
[13/41] PHOENIX-130 Separate execution of slow (integration) tests
from fast unit tests (GabrielReid)
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/df23cf97/phoenix-core/src/test/java/org/apache/phoenix/end2end/ProductMetricsTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/end2end/ProductMetricsTest.java b/phoenix-core/src/test/java/org/apache/phoenix/end2end/ProductMetricsTest.java
deleted file mode 100644
index 9a74cf4..0000000
--- a/phoenix-core/src/test/java/org/apache/phoenix/end2end/ProductMetricsTest.java
+++ /dev/null
@@ -1,2025 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.phoenix.end2end;
-
-import static org.apache.phoenix.util.TestUtil.PHOENIX_JDBC_URL;
-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 java.math.BigDecimal;
-import java.sql.Connection;
-import java.sql.Date;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.sql.Types;
-import java.text.Format;
-import java.text.ParseException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-import org.apache.hadoop.hbase.TableNotFoundException;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.util.Bytes;
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Ordering;
-import org.apache.phoenix.jdbc.PhoenixConnection;
-import org.apache.phoenix.query.ConnectionQueryServices;
-import org.apache.phoenix.query.QueryConstants;
-import org.apache.phoenix.schema.PDataType;
-import org.apache.phoenix.util.ByteUtil;
-import org.apache.phoenix.util.DateUtil;
-import org.apache.phoenix.util.PhoenixRuntime;
-import org.apache.phoenix.util.SchemaUtil;
-import org.apache.phoenix.util.TestUtil;
-
-public class ProductMetricsTest extends BaseClientManagedTimeTest {
- private static Format format = DateUtil.getDateParser(DateUtil.DEFAULT_DATE_FORMAT);
- private static final String PRODUCT_METRICS_NAME = "PRODUCT_METRICS";
- private static final String PRODUCT_METRICS_SCHEMA_NAME = "";
- private static final String DS1 = "1970-01-01 00:58:00";
- private static final String DS2 = "1970-01-01 01:02:00";
- private static final String DS3 = "1970-01-01 01:30:00";
- private static final String DS4 = "1970-01-01 01:45:00";
- private static final String DS5 = "1970-01-01 02:00:00";
- private static final String DS6 = "1970-01-01 04:00:00";
- private static final Date D1 = toDate(DS1);
- private static final Date D2 = toDate(DS2);
- private static final Date D3 = toDate(DS3);
- private static final Date D4 = toDate(DS4);
- private static final Date D5 = toDate(DS5);
- private static final Date D6 = toDate(DS6);
- private static final Object ROUND_1HR = toDate("1970-01-01 01:00:00");
- private static final Object ROUND_2HR = toDate("1970-01-01 02:00:00");
- private static final String F1 = "A";
- private static final String F2 = "B";
- private static final String F3 = "C";
- private static final String R1 = "R1";
- private static final String R2 = "R2";
-
- private static byte[][] getSplits(String tenantId) {
- return new byte[][] {
- ByteUtil.concat(Bytes.toBytes(tenantId), PDataType.DATE.toBytes(D3)),
- ByteUtil.concat(Bytes.toBytes(tenantId), PDataType.DATE.toBytes(D5)),
- };
- }
-
- private static Date toDate(String dateString) {
- try {
- return (Date)format.parseObject(dateString);
- } catch (ParseException e) {
- throw new RuntimeException(e);
- }
- }
-
- private static void initTable(byte[][] splits, long ts) throws Exception {
- ensureTableCreated(getUrl(),PRODUCT_METRICS_NAME,splits, ts-2);
- }
-
- private static void assertNoRows(Connection conn) throws SQLException {
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery("select 1 from PRODUCT_METRICS");
- assertFalse(rs.next());
- }
-
- private static void initTableValues(String tenantId, byte[][] splits, long ts) throws Exception {
- initTable(splits, ts);
-
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- assertNoRows(conn);
- initTableValues(conn, tenantId);
- conn.commit();
- } finally {
- conn.close();
- }
- }
-
- protected static void initTableValues(Connection conn, String tenantId) throws Exception {
- PreparedStatement stmt = conn.prepareStatement(
- "upsert into " +
- "PRODUCT_METRICS(" +
- " ORGANIZATION_ID, " +
- " DATE, " +
- " FEATURE, " +
- " UNIQUE_USERS, " +
- " TRANSACTIONS, " +
- " CPU_UTILIZATION, " +
- " DB_UTILIZATION, " +
- " REGION, " +
- " IO_TIME)" +
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
- stmt.setString(1, tenantId);
- stmt.setDate(2, D1);
- stmt.setString(3, F1);
- stmt.setInt(4, 10);
- stmt.setLong(5, 100L);
- stmt.setBigDecimal(6, BigDecimal.valueOf(0.5));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.2));
- stmt.setString(8, R2);
- stmt.setNull(9, Types.BIGINT);
- stmt.execute();
-
- stmt.setString(1, tenantId);
- stmt.setDate(2, D2);
- stmt.setString(3, F1);
- stmt.setInt(4, 20);
- stmt.setLong(5, 200);
- stmt.setBigDecimal(6, BigDecimal.valueOf(1.0));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.4));
- stmt.setString(8, null);
- stmt.setLong(9, 2000);
- stmt.execute();
-
- stmt.setString(1, tenantId);
- stmt.setDate(2, D3);
- stmt.setString(3, F1);
- stmt.setInt(4, 30);
- stmt.setLong(5, 300);
- stmt.setBigDecimal(6, BigDecimal.valueOf(2.5));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.6));
- stmt.setString(8, R1);
- stmt.setNull(9, Types.BIGINT);
- stmt.execute();
-
- stmt.setString(1, tenantId);
- stmt.setDate(2, D4);
- stmt.setString(3, F2);
- stmt.setInt(4, 40);
- stmt.setLong(5, 400);
- stmt.setBigDecimal(6, BigDecimal.valueOf(3.0));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.8));
- stmt.setString(8, R1);
- stmt.setLong(9, 4000);
- stmt.execute();
-
- stmt.setString(1, tenantId);
- stmt.setDate(2, D5);
- stmt.setString(3, F3);
- stmt.setInt(4, 50);
- stmt.setLong(5, 500);
- stmt.setBigDecimal(6, BigDecimal.valueOf(3.5));
- stmt.setBigDecimal(7, BigDecimal.valueOf(1.2));
- stmt.setString(8, R2);
- stmt.setLong(9, 5000);
- stmt.execute();
-
- stmt.setString(1, tenantId);
- stmt.setDate(2, D6);
- stmt.setString(3, F1);
- stmt.setInt(4, 60);
- stmt.setLong(5, 600);
- stmt.setBigDecimal(6, BigDecimal.valueOf(4.0));
- stmt.setBigDecimal(7, BigDecimal.valueOf(1.4));
- stmt.setString(8, null);
- stmt.setNull(9, Types.BIGINT);
- stmt.execute();
- }
-
- private static void initDateTableValues(String tenantId, byte[][] splits, long ts, Date startDate) throws Exception {
- initDateTableValues(tenantId, splits, ts, startDate, 2.0);
- }
-
- private static void initDateTableValues(String tenantId, byte[][] splits, long ts, Date startDate, double dateIncrement) throws Exception {
- initTable(splits, ts);
-
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- assertNoRows(conn);
- initDateTableValues(conn, tenantId, startDate, dateIncrement);
- conn.commit();
- } finally {
- conn.close();
- }
- }
-
- private static void initDateTableValues(Connection conn, String tenantId, Date startDate, double dateIncrement) throws Exception {
- PreparedStatement stmt = conn.prepareStatement(
- "upsert into " +
- "PRODUCT_METRICS(" +
- " ORGANIZATION_ID, " +
- " DATE, " +
- " FEATURE, " +
- " UNIQUE_USERS, " +
- " TRANSACTIONS, " +
- " CPU_UTILIZATION, " +
- " DB_UTILIZATION, " +
- " REGION, " +
- " IO_TIME)" +
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
- stmt.setString(1, tenantId);
- stmt.setDate(2, startDate);
- stmt.setString(3, "A");
- stmt.setInt(4, 10);
- stmt.setLong(5, 100L);
- stmt.setBigDecimal(6, BigDecimal.valueOf(0.5));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.2));
- stmt.setString(8, R2);
- stmt.setNull(9, Types.BIGINT);
- stmt.execute();
-
- startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement));
- stmt.setString(1, tenantId);
- stmt.setDate(2, startDate);
- stmt.setString(3, "B");
- stmt.setInt(4, 20);
- stmt.setLong(5, 200);
- stmt.setBigDecimal(6, BigDecimal.valueOf(1.0));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.4));
- stmt.setString(8, null);
- stmt.setLong(9, 2000);
- stmt.execute();
-
- startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement));
- stmt.setString(1, tenantId);
- stmt.setDate(2, startDate);
- stmt.setString(3, "C");
- stmt.setInt(4, 30);
- stmt.setLong(5, 300);
- stmt.setBigDecimal(6, BigDecimal.valueOf(2.5));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.6));
- stmt.setString(8, R1);
- stmt.setNull(9, Types.BIGINT);
- stmt.execute();
-
- startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement));
- stmt.setString(1, tenantId);
- stmt.setDate(2, startDate);
- stmt.setString(3, "D");
- stmt.setInt(4, 40);
- stmt.setLong(5, 400);
- stmt.setBigDecimal(6, BigDecimal.valueOf(3.0));
- stmt.setBigDecimal(7, BigDecimal.valueOf(0.8));
- stmt.setString(8, R1);
- stmt.setLong(9, 4000);
- stmt.execute();
-
- startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement));
- stmt.setString(1, tenantId);
- stmt.setDate(2, startDate);
- stmt.setString(3, "E");
- stmt.setInt(4, 50);
- stmt.setLong(5, 500);
- stmt.setBigDecimal(6, BigDecimal.valueOf(3.5));
- stmt.setBigDecimal(7, BigDecimal.valueOf(1.2));
- stmt.setString(8, R2);
- stmt.setLong(9, 5000);
- stmt.execute();
-
- startDate = new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * dateIncrement));
- stmt.setString(1, tenantId);
- stmt.setDate(2, startDate);
- stmt.setString(3, "F");
- stmt.setInt(4, 60);
- stmt.setLong(5, 600);
- stmt.setBigDecimal(6, BigDecimal.valueOf(4.0));
- stmt.setBigDecimal(7, BigDecimal.valueOf(1.4));
- stmt.setString(8, null);
- stmt.setNull(9, Types.BIGINT);
- stmt.execute();
- }
-
- @Test
- public void testDateRangeAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(1), feature f FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?) GROUP BY f";
- //String query = "SELECT count(1), feature FROM PRODUCT_METRICS GROUP BY feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(2, rs.getLong(1));
- assertEquals(F1, rs.getString(2));
- assertTrue(rs.next());
- assertEquals(1, rs.getLong(1));
- assertEquals(F2, rs.getString(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testTableAliasSameAsTableName() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(PRODUCT_METRICS.transactions) FROM PRODUCT_METRICS PRODUCT_METRICS";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(2100, rs.getLong(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testPartiallyEvaluableAnd() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT date FROM PRODUCT_METRICS WHERE organization_id=? AND unique_users >= 30 AND transactions >= 300 AND cpu_utilization > 2 AND db_utilization > 0.5 AND io_time = 4000";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(D4, rs.getDate(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testPartiallyEvaluableOr() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT date FROM PRODUCT_METRICS WHERE organization_id=? AND (transactions = 10000 OR unset_column = 5 OR io_time = 4000)";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(D4, rs.getDate(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testConstantTrueHaving() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(1), feature FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?) GROUP BY feature HAVING 1=1";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(2, rs.getLong(1));
- assertEquals(F1, rs.getString(2));
- assertTrue(rs.next());
- assertEquals(1, rs.getLong(1));
- assertEquals(F2, rs.getString(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testConstantFalseHaving() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(1), feature FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?) GROUP BY feature HAVING 1=1 and 0=1";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, DS4);
- ResultSet rs = statement.executeQuery();
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateRangeHavingAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(1), feature FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?) GROUP BY feature HAVING count(1) >= 2";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(2, rs.getLong(1));
- assertEquals(F1, rs.getString(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateRangeSumLongAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(transactions), feature FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?) GROUP BY feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(500, rs.getLong(1));
- assertEquals(F1, rs.getString(2));
- assertTrue(rs.next());
- assertEquals(400, rs.getLong(1));
- assertEquals(F2, rs.getString(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testRoundAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT round(date,'hour',1) r,count(1) FROM PRODUCT_METRICS WHERE organization_id=? GROUP BY r";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- Date d;
- int c;
- ResultSet rs = statement.executeQuery();
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(1 * 60 * 60 * 1000, d.getTime()); // Date bucketed into 1 hr
- assertEquals(2, c);
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(2 * 60 * 60 * 1000, d.getTime()); // Date bucketed into 2 hr
- assertEquals(3, c);
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(4 * 60 * 60 * 1000, d.getTime()); // Date bucketed into 4 hr
- assertEquals(1, c);
-
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testRoundScan() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT round(date,'hour') FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- Date d;
- long t;
- ResultSet rs = statement.executeQuery();
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- t = 1 * 60 * 60 * 1000;
- assertEquals(t, d.getTime()); // Date bucketed into 1 hr
- assertTrue(rs.next());
- assertEquals(t, d.getTime()); // Date bucketed into 1 hr
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- t = 2 * 60 * 60 * 1000;
- assertEquals(t, d.getTime()); // Date bucketed into 2 hr
- assertTrue(rs.next());
- assertEquals(t, d.getTime()); // Date bucketed into 2 hr
- assertTrue(rs.next());
- assertEquals(t, d.getTime()); // Date bucketed into 2 hr
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- t = 4 * 60 * 60 * 1000;
- assertEquals(t, d.getTime()); // Date bucketed into 4 hr
-
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testTruncAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT trunc(date,'hour'),count(1) FROM PRODUCT_METRICS WHERE organization_id=? GROUP BY trunc(date,'hour')";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- Date d;
- int c;
- ResultSet rs = statement.executeQuery();
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(0, d.getTime()); // Date bucketed into 0 hr
- assertEquals(1, c);
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(1 * 60 * 60 * 1000, d.getTime()); // Date bucketed into 1 hr
- assertEquals(3, c);
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(2 * 60 * 60 * 1000, d.getTime()); // Date bucketed into 2 hr
- assertEquals(1, c);
-
- assertTrue(rs.next());
- d = rs.getDate(1);
- c = rs.getInt(2);
- assertEquals(4 * 60 * 60 * 1000, d.getTime()); // Date bucketed into 4 hr
- assertEquals(1, c);
-
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,sum(unique_users) FROM PRODUCT_METRICS WHERE organization_id=? AND transactions > 0 GROUP BY feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertTrue(rs.next());
- assertTrue(rs.next());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testHavingAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,sum(unique_users) FROM PRODUCT_METRICS WHERE organization_id=? AND transactions > 0 GROUP BY feature HAVING feature=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F1);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testConstantSumAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(1),sum(unique_users) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(6,rs.getInt(1));
- assertEquals(210,rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testMultiDimAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,region,sum(unique_users) FROM PRODUCT_METRICS WHERE organization_id=? GROUP BY feature,region";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
-
- assertTrue(rs.next());
- assertEquals(F1,rs.getString(1));
- assertEquals(null,rs.getString(2));
- assertEquals(80,rs.getInt(3));
- assertTrue(rs.next());
- assertEquals(F1,rs.getString(1));
- assertEquals(R1,rs.getString(2));
- assertEquals(30,rs.getInt(3));
- assertTrue(rs.next());
- assertEquals(F1,rs.getString(1));
- assertEquals(R2,rs.getString(2));
- assertEquals(10,rs.getInt(3));
-
- assertTrue(rs.next());
- assertEquals(F2,rs.getString(1));
- assertEquals(R1,rs.getString(2));
- assertEquals(40,rs.getInt(3));
-
- assertTrue(rs.next());
- assertEquals(F3,rs.getString(1));
- assertEquals(R2,rs.getString(2));
- assertEquals(50,rs.getInt(3));
-
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testMultiDimRoundAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT round(date,'hour',1),feature,sum(unique_users) FROM PRODUCT_METRICS WHERE organization_id=? GROUP BY round(date,'hour',1),feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
-
- Date bucket1 = new Date(1 * 60 * 60 * 1000);
- Date bucket2 = new Date(2 * 60 * 60 * 1000);
- Date bucket3 = new Date(4 * 60 * 60 * 1000);
-
- assertTrue(rs.next());
- assertEquals(bucket1, rs.getDate(1));
- assertEquals(F1,rs.getString(2));
- assertEquals(30,rs.getInt(3));
-
-
- assertTrue(rs.next());
- assertEquals(bucket2, rs.getDate(1));
- assertEquals(F1,rs.getString(2));
- assertEquals(30,rs.getInt(3));
-
- assertTrue(rs.next());
- assertEquals(bucket2.getTime(), rs.getDate(1).getTime());
- assertEquals(F2,rs.getString(2));
- assertEquals(40,rs.getInt(3));
-
- assertTrue(rs.next());
- assertEquals(bucket2, rs.getDate(1));
- assertEquals(F3,rs.getString(2));
- assertEquals(50,rs.getInt(3));
-
-
- assertTrue(rs.next());
- assertEquals(bucket3, rs.getDate(1));
- assertEquals(F1,rs.getString(2));
- assertEquals(60,rs.getInt(3));
-
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateRangeSumNumberUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(cpu_utilization) FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?)";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(BigDecimal.valueOf(6.5), rs.getBigDecimal(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testSumUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(unique_users),sum(cpu_utilization),sum(transactions),sum(db_utilization),sum(response_time) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(210, rs.getInt(1));
- assertEquals(BigDecimal.valueOf(14.5), rs.getBigDecimal(2));
- assertEquals(2100L, rs.getLong(3));
- assertEquals(BigDecimal.valueOf(4.6), rs.getBigDecimal(4));
- assertEquals(0, rs.getLong(5));
- assertEquals(true, rs.wasNull());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testResetColumnInSameTxn() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(transactions) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- String upsertUrl = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + ts; // Run updates at timestamp 0
- Connection upsertConn = DriverManager.getConnection(upsertUrl, props);
- try {
- initTable(getSplits(tenantId), ts);
- initTableValues(upsertConn, tenantId);
- PreparedStatement stmt = upsertConn.prepareStatement(
- "upsert into " +
- "PRODUCT_METRICS(" +
- " ORGANIZATION_ID, " +
- " DATE, " +
- " FEATURE, " +
- " UNIQUE_USERS," +
- " TRANSACTIONS) " +
- "VALUES (?, ?, ?, ?, ?)");
- stmt.setString(1, tenantId);
- stmt.setDate(2, D1);
- stmt.setString(3, F1);
- stmt.setInt(4, 10);
- stmt.setInt(5, 200); // Change TRANSACTIONS from 100 to 200
- stmt.execute();
- upsertConn.commit();
-
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(2200, rs.getInt(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testSumUngroupedHavingAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(unique_users),sum(cpu_utilization),sum(transactions),sum(db_utilization),sum(response_time) FROM PRODUCT_METRICS WHERE organization_id=? HAVING sum(unique_users) > 200 AND sum(db_utilization) > 4.5";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(210, rs.getInt(1));
- assertEquals(BigDecimal.valueOf(14.5), rs.getBigDecimal(2));
- assertEquals(2100L, rs.getLong(3));
- assertEquals(BigDecimal.valueOf(4.6), rs.getBigDecimal(4));
- assertEquals(0, rs.getLong(5));
- assertEquals(true, rs.wasNull());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testSumUngroupedHavingAggregation2() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(unique_users),sum(cpu_utilization),sum(transactions),sum(db_utilization),sum(response_time) FROM PRODUCT_METRICS WHERE organization_id=? HAVING sum(unique_users) > 200 AND sum(db_utilization) > 5";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testMinUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT min(unique_users),min(cpu_utilization),min(transactions),min(db_utilization),min('X'),min(response_time) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(10, rs.getInt(1));
- assertEquals(BigDecimal.valueOf(0.5), rs.getBigDecimal(2));
- assertEquals(100L, rs.getLong(3));
- assertEquals(BigDecimal.valueOf(0.2), rs.getBigDecimal(4));
- assertEquals("X", rs.getString(5));
- assertEquals(0, rs.getLong(6));
- assertEquals(true, rs.wasNull());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testMinUngroupedAggregation1() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT min(cpu_utilization) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(BigDecimal.valueOf(0.5), rs.getBigDecimal(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testMaxUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT max(unique_users),max(cpu_utilization),max(transactions),max(db_utilization),max('X'),max(response_time) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(60, rs.getInt(1));
- assertEquals(BigDecimal.valueOf(4), rs.getBigDecimal(2));
- assertEquals(600L, rs.getLong(3));
- assertEquals(BigDecimal.valueOf(1.4), rs.getBigDecimal(4));
- assertEquals("X", rs.getString(5));
- assertEquals(0, rs.getLong(6));
- assertEquals(true, rs.wasNull());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testMaxGroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,max(transactions) FROM PRODUCT_METRICS WHERE organization_id=? GROUP BY feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F1,rs.getString(1));
- assertEquals(600,rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F2,rs.getString(1));
- assertEquals(400,rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F3,rs.getString(1));
- assertEquals(500,rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testCountUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(1) FROM PRODUCT_METRICS";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(6, rs.getLong(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testCountColumnUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(io_time),sum(io_time),avg(io_time) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(3, rs.getLong(1));
- assertEquals(11000, rs.getLong(2));
- // Scale is automatically capped at 4 if no scale is specified.
- assertEquals(new BigDecimal("3666.6666"), rs.getBigDecimal(3));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testNoRowsUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(io_time),sum(io_time),avg(io_time),count(1) FROM PRODUCT_METRICS WHERE organization_id=? AND feature > ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2,F3);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(0, rs.getLong(1));
- assertFalse(rs.wasNull());
- assertEquals(0, rs.getLong(2));
- assertTrue(rs.wasNull());
- assertEquals(null, rs.getBigDecimal(3));
- assertEquals(0, rs.getLong(4));
- assertFalse(rs.wasNull());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testAvgUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT avg(unique_users) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(BigDecimal.valueOf(35), rs.getBigDecimal(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testAvgUngroupedAggregationOnValueField() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT AVG(DB_UTILIZATION) FROM PRODUCT_METRICS WHERE organization_id=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
-
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- // The column is defined as decimal(31,10), so the value is capped at 10 decimal points.
- assertEquals(new BigDecimal("0.7666666666"), rs.getBigDecimal(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- /**
- * Test aggregate query with rownum limit that does not explicity contain a count(1) as a select expression
- * @throws Exception
- */
- @Test
- public void testLimitSumUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- // No count(1) aggregation, so it will get added automatically
- // LIMIT has no effect, since it's applied at the end and we'll always have a single row for ungrouped aggregation
- String query = "SELECT sum(unique_users),sum(cpu_utilization),sum(transactions),sum(db_utilization),sum(response_time) feature FROM PRODUCT_METRICS WHERE organization_id=? LIMIT 3";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(210, rs.getInt(1));
- assertEquals(BigDecimal.valueOf(14.5), rs.getBigDecimal(2));
- assertEquals(2100L, rs.getLong(3));
- assertEquals(BigDecimal.valueOf(4.6), rs.getBigDecimal(4));
- assertEquals(0, rs.getLong(5));
- assertEquals(true, rs.wasNull());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- /**
- * Test grouped aggregation query with a mix of aggregated data types
- * @throws Exception
- */
- @Test
- public void testSumGroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,sum(unique_users),sum(cpu_utilization),sum(transactions),sum(db_utilization),sum(response_time),count(1) c FROM PRODUCT_METRICS WHERE organization_id=? AND feature < ? GROUP BY feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F3);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F1, rs.getString("feature"));
- assertEquals(120, rs.getInt("sum(unique_users)"));
- assertEquals(BigDecimal.valueOf(8), rs.getBigDecimal(3));
- assertEquals(1200L, rs.getLong(4));
- assertEquals(BigDecimal.valueOf(2.6), rs.getBigDecimal(5));
- assertEquals(0, rs.getLong(6));
- assertEquals(true, rs.wasNull());
- assertEquals(4, rs.getLong("c"));
- assertTrue(rs.next());
- assertEquals(F2, rs.getString("feature"));
- assertEquals(40, rs.getInt(2));
- assertEquals(BigDecimal.valueOf(3), rs.getBigDecimal(3));
- assertEquals(400L, rs.getLong(4));
- assertEquals(BigDecimal.valueOf(0.8), rs.getBigDecimal(5));
- assertEquals(0, rs.getLong(6));
- assertEquals(true, rs.wasNull());
- assertEquals(1, rs.getLong("c"));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDegenerateAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT count(1), feature FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND date <= to_date(?) GROUP BY feature";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- // Start date larger than end date
- statement.setString(2, DS4);
- statement.setString(3, DS2);
- ResultSet rs = statement.executeQuery();
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- /**
- * Query with multiple > expressions on continquous PK columns
- * @throws Exception
- */
- @Test
- public void testFeatureDateRangeAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,unique_users FROM PRODUCT_METRICS WHERE organization_id=? AND date >= to_date(?) AND feature > ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, DS2);
- statement.setString(3, F2);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F3, rs.getString(1));
- assertEquals(50, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- /**
- * Query with non contiguous PK column expressions (i.e. no expresion for DATE)
- * @throws Exception
- */
- @Test
- public void testFeatureGTAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,unique_users FROM PRODUCT_METRICS WHERE organization_id=? AND feature > ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F2);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F3, rs.getString(1));
- assertEquals(50, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testFeatureGTEAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,unique_users FROM PRODUCT_METRICS WHERE organization_id=? AND feature >= ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F2);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F2, rs.getString(1));
- assertEquals(40, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F3, rs.getString(1));
- assertEquals(50, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testFeatureEQAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,unique_users FROM PRODUCT_METRICS WHERE organization_id=? AND feature = ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F2);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F2, rs.getString(1));
- assertEquals(40, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
-
- @Test
- public void testFeatureLTAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,unique_users FROM PRODUCT_METRICS WHERE organization_id=? AND feature < ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F2);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(10, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(20, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(30, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(60, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testFeatureLTEAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,unique_users FROM PRODUCT_METRICS WHERE organization_id=? AND feature <= ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setString(2, F2);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(10, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(20, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(30, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F2, rs.getString(1));
- assertEquals(40, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(F1, rs.getString(1));
- assertEquals(60, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
- @Test
- public void testOrderByNonAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- initTableValues(tenantId, getSplits(tenantId), ts);
- String query = "SELECT date, transactions t FROM PRODUCT_METRICS WHERE organization_id=? AND unique_users <= 30 ORDER BY t DESC LIMIT 2";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
-
- Connection conn = DriverManager.getConnection(url, props);
- try {
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(D3.getTime(), rs.getDate(1).getTime());
- assertTrue(rs.next());
- assertEquals(D2.getTime(), rs.getDate(1).getTime());
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testOrderByUngroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(unique_users) sumUsers,count(feature) " +
- "FROM PRODUCT_METRICS " +
- "WHERE organization_id=? " +
- "ORDER BY 100000-sumUsers";
-
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(210, rs.getInt(1));
- assertEquals(6, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testOrderByGroupedAggregation() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature,sum(unique_users) s,count(feature),round(date,'hour',1) r " +
- "FROM PRODUCT_METRICS " +
- "WHERE organization_id=? " +
- "GROUP BY feature, r " +
- "ORDER BY 1 desc,feature desc,r,feature,s";
-
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
-
- Object[][] expected = {
- {F3, 50, 1},
- {F2, 40, 1},
- {F1, 30, 2},
- {F1, 30, 1},
- {F1, 60, 1},
- };
-
- for (int i = 0; i < expected.length; i++) {
- assertTrue(rs.next());
- assertEquals(expected[i][0], rs.getString(1));
- assertEquals(expected[i][1], rs.getInt(2));
- assertEquals(expected[i][2], rs.getInt(3));
- }
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testOrderByUnprojected() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT sum(unique_users), count(feature) c " +
- "FROM PRODUCT_METRICS " +
- "WHERE organization_id=? " +
- "GROUP BY feature " +
- "ORDER BY 100-c,feature";
-
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
-
- int[] expected = {120, 40, 50};
- for (int i = 0; i < expected.length; i++) {
- assertTrue(rs.next());
- assertEquals(expected[i], rs.getInt(1));
- }
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testOrderByNullColumns__nullsFirst() throws Exception {
- helpTestOrderByNullColumns(true);
- }
-
- @Test
- public void testOrderByNullColumns__nullsLast() throws Exception {
- helpTestOrderByNullColumns(false);
- }
-
- private void helpTestOrderByNullColumns(boolean nullsFirst) throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT region " +
- "FROM PRODUCT_METRICS " +
- "WHERE organization_id=? " +
- "GROUP BY region " +
- "ORDER BY region nulls " + (nullsFirst ? "first" : "last");
-
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
-
- List<String> expected = Lists.newArrayList(null, R1, R2);
- Ordering<String> regionOrdering = Ordering.natural();
- regionOrdering = nullsFirst ? regionOrdering.nullsFirst() : regionOrdering.nullsLast();
- Collections.sort(expected, regionOrdering);
-
- for (String region : expected) {
- assertTrue(rs.next());
- assertEquals(region, rs.getString(1));
- }
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- /**
- * Test to repro ArrayIndexOutOfBoundException that happens during filtering in BinarySubsetComparator
- * only after a flush is performed
- * @throws Exception
- */
- @Test
- public void testFilterOnTrailingKeyColumn() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- Properties props = new Properties(TEST_PROPERTIES);
- props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts+1));
- Connection conn = DriverManager.getConnection(PHOENIX_JDBC_URL, props);
-
- HBaseAdmin admin = null;
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- admin = conn.unwrap(PhoenixConnection.class).getQueryServices().getAdmin();
- admin.flush(SchemaUtil.getTableNameAsBytes(PRODUCT_METRICS_SCHEMA_NAME,PRODUCT_METRICS_NAME));
- String query = "SELECT SUM(TRANSACTIONS) FROM " + PRODUCT_METRICS_NAME + " WHERE FEATURE=?";
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, F1);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(1200, rs.getInt(1));
- } finally {
- if (admin != null) admin.close();
- conn.close();
- }
- }
-
- @Test
- public void testFilterOnTrailingKeyColumn2() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT organization_id, date, feature FROM PRODUCT_METRICS WHERE substr(organization_id,1,3)=? AND date > to_date(?)";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId.substring(0,3));
- statement.setString(2, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(tenantId, rs.getString(1));
- assertEquals(D5.getTime(), rs.getDate(2).getTime());
- assertEquals(F3, rs.getString(3));
- assertTrue(rs.next());
- assertEquals(tenantId, rs.getString(1));
- assertEquals(D6, rs.getDate(2));
- assertEquals(F1, rs.getString(3));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testSubstringNotEqual() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT organization_id, date, feature FROM PRODUCT_METRICS WHERE organization_id=? AND date > to_date(?)";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId.substring(0,3));
- statement.setString(2, DS4);
- ResultSet rs = statement.executeQuery();
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testKeyOrderedAggregation1() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT date, sum(UNIQUE_USERS) FROM PRODUCT_METRICS WHERE date > to_date(?) GROUP BY organization_id, date";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(D5, rs.getDate(1));
- assertEquals(50, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(D6, rs.getDate(1));
- assertEquals(60, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testKeyOrderedAggregation2() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT date, sum(UNIQUE_USERS) FROM PRODUCT_METRICS WHERE date < to_date(?) GROUP BY organization_id, date";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(D1, rs.getDate(1));
- assertEquals(10, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(D2, rs.getDate(1));
- assertEquals(20, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(D3, rs.getDate(1));
- assertEquals(30, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testKeyOrderedRoundAggregation1() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT round(date,'HOUR'), sum(UNIQUE_USERS) FROM PRODUCT_METRICS WHERE date < to_date(?) GROUP BY organization_id, round(date,'HOUR')";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(ROUND_1HR, rs.getDate(1));
- assertEquals(30, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(ROUND_2HR, rs.getDate(1));
- assertEquals(30, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testKeyOrderedRoundAggregation2() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT round(date,'HOUR'), sum(UNIQUE_USERS) FROM PRODUCT_METRICS WHERE date <= to_date(?) GROUP BY organization_id, round(date,'HOUR')";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- initTableValues(tenantId, getSplits(tenantId), ts);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, DS4);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals(ROUND_1HR, rs.getDate(1));
- assertEquals(30, rs.getInt(2));
- assertTrue(rs.next());
- assertEquals(ROUND_2HR, rs.getDate(1));
- assertEquals(70, rs.getInt(2));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testEqualsRound() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and trunc(date,'DAY')=?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- Date equalDate = new Date((startDate.getTime() + 2 * QueryConstants.MILLIS_IN_DAY)/ QueryConstants.MILLIS_IN_DAY*QueryConstants.MILLIS_IN_DAY);
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate, 1.0);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setDate(2, equalDate);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("C", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateSubtractionCompareNumber() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and ? - date > 3";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- Date endDate = new Date(startDate.getTime() + 6 * QueryConstants.MILLIS_IN_DAY);
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setDate(2, endDate);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("A", rs.getString(1));
- assertTrue(rs.next());
- assertEquals("B", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateSubtractionLongToDecimalCompareNumber() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and ? - date - 1.5 > 3";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY);
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setDate(2, endDate);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("A", rs.getString(1));
- assertTrue(rs.next());
- assertEquals("B", rs.getString(1));
- assertTrue(rs.next());
- assertEquals("C", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateSubtractionCompareDate() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and date - 1 >= ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY);
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setDate(2, endDate);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("F", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testDateAddCompareDate() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and date + 1 >= ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- Date endDate = new Date(startDate.getTime() + 8 * QueryConstants.MILLIS_IN_DAY);
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setDate(2, endDate);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("E", rs.getString(1));
- assertTrue(rs.next());
- assertEquals("F", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testCurrentDate() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and date - current_date() > 8";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("F", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testCurrentTime() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and date - current_time() > 8";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = new Date(System.currentTimeMillis());
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("F", rs.getString(1));
- assertFalse(rs.next());
- } finally {
- conn.close();
- }
- }
-
- @Test
- public void testTruncateNotTraversableToFormScanKey() throws Exception {
- long ts = nextTimestamp();
- String tenantId = getOrganizationId();
- String query = "SELECT feature FROM PRODUCT_METRICS WHERE organization_id = ? and TRUNC(date,'DAY') <= ?";
- String url = PHOENIX_JDBC_URL + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5
- Properties props = new Properties(TEST_PROPERTIES);
- Connection conn = DriverManager.getConnection(url, props);
- try {
- Date startDate = toDate("2013-01-01 00:00:00");
- initDateTableValues(tenantId, getSplits(tenantId), ts, startDate, 0.5);
- PreparedStatement statement = conn.prepareStatement(query);
- statement.setString(1, tenantId);
- statement.setDate(2, new Date(startDate.getTime() + (long)(QueryConstants.MILLIS_IN_DAY * 0.25)));
- ResultSet rs = statement.executeQuery();
- assertTrue(rs.next());
- assertEquals("A", rs.getString(1));
- assertTrue(rs.next());
- assertEquals("B", rs.getString(1));
- assertFalse(rs.next());
- } finally {
<TRUNCATED>