Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-0.98 681b310b7 -> 2d23b4275


PHOENIX-1748 Applying TRUNC|ROUND|FLOOR|CEIL on TIMESTAMP should maintain 
return type of TIMESTAMP (Dave Hacker)


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

Branch: refs/heads/4.x-HBase-0.98
Commit: 2d23b427518b2aec1ed0ca316f09ef43fd45ec0e
Parents: 681b310
Author: Thomas D'Silva <twdsi...@gmail.com>
Authored: Thu Apr 2 11:51:04 2015 -0700
Committer: Thomas D'Silva <twdsi...@gmail.com>
Committed: Thu Apr 2 11:57:01 2015 -0700

----------------------------------------------------------------------
 .../RoundFloorCeilFunctionsEnd2EndIT.java       | 114 +++++++++++++++++++
 1 file changed, 114 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/2d23b427/phoenix-core/src/it/java/org/apache/phoenix/end2end/RoundFloorCeilFunctionsEnd2EndIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/RoundFloorCeilFunctionsEnd2EndIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/RoundFloorCeilFunctionsEnd2EndIT.java
index 2cf08e9..42635c6 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/RoundFloorCeilFunctionsEnd2EndIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/RoundFloorCeilFunctionsEnd2EndIT.java
@@ -29,10 +29,12 @@ import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.Time;
 import java.sql.Timestamp;
+import java.util.Properties;
 
 import org.apache.phoenix.expression.function.CeilFunction;
 import org.apache.phoenix.expression.function.FloorFunction;
 import org.apache.phoenix.expression.function.RoundFunction;
+import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.util.DateUtil;
 import org.junit.Before;
 import org.junit.Test;
@@ -439,5 +441,117 @@ public class RoundFloorCeilFunctionsEnd2EndIT extends 
BaseHBaseManagedTimeIT {
                assertEquals(0, Floats.compare(1.26f, rs.getFloat(3)));
                assertEquals(0, Floats.compare(1.264f, rs.getFloat(4)));
        }       
+       
+       @Test
+       public void testTimestampAggregateFunctions() throws Exception {
+               String dateString = "2015-03-08 09:09:11.665";
+               Properties props = new Properties();
+               props.setProperty(QueryServices.DATE_FORMAT_TIMEZONE_ATTRIB, 
"GMT+1");
+               Connection conn = DriverManager.getConnection(getUrl(), props);
+               try {
+                       conn.prepareStatement(
+                                       "create table TIME_AGG_TABLE("
+                                                       + "ID unsigned_int NOT 
NULL, "
+                                                       + "THE_DATE TIMESTAMP, "
+                                                       + "constraint PK 
primary key (ID))").execute();
+                       PreparedStatement stmt = conn.prepareStatement("upsert 
into "
+                                       + "TIME_AGG_TABLE(" + "    ID, " + "    
THE_DATE)"
+                                       + "VALUES (?, ?)");
+                       stmt.setInt(1, 1);
+                       stmt.setTimestamp(2, 
DateUtil.parseTimestamp(dateString));
+                       stmt.execute();
+                       conn.commit();
+
+                       ResultSet rs = conn.prepareStatement(
+                                       "SELECT THE_DATE ,TRUNC(THE_DATE,'DAY') 
AS day_from_dt "
+                                                       + 
",TRUNC(THE_DATE,'HOUR') AS hour_from_dt "
+                                                       + 
",TRUNC(THE_DATE,'MINUTE') AS min_from_dt "
+                                                       + 
",TRUNC(THE_DATE,'SECOND') AS sec_from_dt "
+                                                       + 
",TRUNC(THE_DATE,'MILLISECOND') AS mil_from_dt "
+                                                       + "FROM 
TIME_AGG_TABLE").executeQuery();
+                       assertTrue(rs.next());
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("THE_DATE"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
00:00:00.0"),
+                                       rs.getTimestamp("day_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:00:00.0"),
+                                       rs.getTimestamp("hour_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:00.0"),
+                                       rs.getTimestamp("min_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.0"),
+                                       rs.getTimestamp("sec_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("mil_from_dt"));
+                       rs.close();
+
+                       rs = conn.prepareStatement(
+                                       "SELECT THE_DATE ,ROUND(THE_DATE,'DAY') 
AS day_from_dt "
+                                                       + 
",ROUND(THE_DATE,'HOUR') AS hour_from_dt "
+                                                       + 
",ROUND(THE_DATE,'MINUTE') AS min_from_dt "
+                                                       + 
",ROUND(THE_DATE,'SECOND') AS sec_from_dt "
+                                                       + 
",ROUND(THE_DATE,'MILLISECOND') AS mil_from_dt "
+                                                       + "FROM 
TIME_AGG_TABLE").executeQuery();
+                       assertTrue(rs.next());
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("THE_DATE"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
00:00:00.0"),
+                                       rs.getTimestamp("day_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:00:00.0"),
+                                       rs.getTimestamp("hour_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:00.0"),
+                                       rs.getTimestamp("min_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:12.0"),
+                                       rs.getTimestamp("sec_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("mil_from_dt"));
+                       rs.close();
+
+                       rs = conn.prepareStatement(
+                                       "SELECT THE_DATE ,FLOOR(THE_DATE,'DAY') 
AS day_from_dt "
+                                                       + 
",FLOOR(THE_DATE,'HOUR') AS hour_from_dt "
+                                                       + 
",FLOOR(THE_DATE,'MINUTE') AS min_from_dt "
+                                                       + 
",FLOOR(THE_DATE,'SECOND') AS sec_from_dt "
+                                                       + 
",FLOOR(THE_DATE,'MILLISECOND') AS mil_from_dt "
+                                                       + "FROM 
TIME_AGG_TABLE").executeQuery();
+                       assertTrue(rs.next());
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("THE_DATE"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
00:00:00.0"),
+                                       rs.getTimestamp("day_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:00:00.0"),
+                                       rs.getTimestamp("hour_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:00.0"),
+                                       rs.getTimestamp("min_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.0"),
+                                       rs.getTimestamp("sec_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("mil_from_dt"));
+                       rs.close();
+
+                       rs = conn.prepareStatement(
+                                       "SELECT THE_DATE ,CEIL(THE_DATE,'DAY') 
AS day_from_dt "
+                                                       + 
",CEIL(THE_DATE,'HOUR') AS hour_from_dt "
+                                                       + 
",CEIL(THE_DATE,'MINUTE') AS min_from_dt "
+                                                       + 
",CEIL(THE_DATE,'SECOND') AS sec_from_dt "
+                                                       + 
",CEIL(THE_DATE,'MILLISECOND') AS mil_from_dt "
+                                                       + "FROM 
TIME_AGG_TABLE").executeQuery();
+                       assertTrue(rs.next());
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("THE_DATE"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-09 
00:00:00.0"),
+                                       rs.getTimestamp("day_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
10:00:00.0"),
+                                       rs.getTimestamp("hour_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:10:00.0"),
+                                       rs.getTimestamp("min_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:12.0"),
+                                       rs.getTimestamp("sec_from_dt"));
+                       assertEquals(DateUtil.parseTimestamp("2015-03-08 
09:09:11.665"),
+                                       rs.getTimestamp("mil_from_dt"));
+                       rs.close();
+               } finally {
+                       conn.close();
+               }
+       }
 
 }

Reply via email to