From 9d8af3bbbd9f6102f5adbcee58ff85652975424d Mon Sep 17 00:00:00 2001 From: "mike.friedman" Date: Mon, 23 Feb 2015 18:48:41 -0800 Subject: [PATCH 1/2] Add some DATE-related tests. --- .../apache/phoenix/parse/QueryParserTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/phoenix-core/src/test/java/org/apache/phoenix/parse/QueryParserTest.java b/phoenix-core/src/test/java/org/apache/phoenix/parse/QueryParserTest.java index bf599aebb57..182757faaaf 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/parse/QueryParserTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/parse/QueryParserTest.java @@ -748,6 +748,24 @@ public void testUnsignedTimestampLiteral() throws Exception { parseQuery(sql); } + @Test + public void testParseDateEquality() throws Exception { + SQLParser parser = new SQLParser(new StringReader( + "select a from b\n" + + "where date '2014-01-04' = date '2014-01-04'" + )); + parser.parseStatement(); + } + + @Test + public void testParseDateIn() throws Exception { + SQLParser parser = new SQLParser(new StringReader( + "select a from b\n" + + "where date '2014-01-04' in (date '2014-01-04')" + )); + parser.parseStatement(); + } + @Test public void testUnknownLiteral() throws Exception { String sql = ( From 31466d490f8f152d81bbf9e9a1c78d61f4316406 Mon Sep 17 00:00:00 2001 From: "mike.friedman" Date: Mon, 23 Feb 2015 19:06:10 -0800 Subject: [PATCH 2/2] More DATE tests. --- .../org/apache/phoenix/end2end/QueryIT.java | 128 ++++++++++++++++++ 1 file changed, 128 insertions(+) diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryIT.java index d3bbe23d584..663662b839b 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryIT.java @@ -41,15 +41,19 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Statement; import java.sql.Time; import java.sql.Timestamp; +import java.text.Format; import java.util.Arrays; +import java.util.Calendar; import java.util.Properties; import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.phoenix.exception.SQLExceptionCode; import org.apache.phoenix.schema.types.PTimestamp; +import org.apache.phoenix.util.DateUtil; import org.apache.phoenix.util.PhoenixRuntime; import org.apache.phoenix.util.PropertiesUtil; import org.junit.Test; @@ -294,6 +298,130 @@ public void testTimestamp() throws Exception { } } + @Test + public void testDateBetweenLiterals() throws Exception { + Format formatter = DateUtil.getDateFormatter("yyyy-MM-dd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + java.util.Date dateToday = cal.getTime(); + cal.add(Calendar.DAY_OF_YEAR, 1); + java.util.Date dateTomorrow = cal.getTime(); + String today = formatter.format(dateToday); + String tomorrow = formatter.format(dateTomorrow); + String query = "SELECT entity_id FROM ATABLE WHERE a_integer < 4 AND a_date BETWEEN date '" + today + "' AND date '" + tomorrow + "' "; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertTrue(rs.next()); + assertEquals(ROW1, rs.getString(1)); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testSelectLiteralDate() throws Exception { + final String date = "2012-09-08"; + String query = "SELECT DATE '" + date + "' FROM ATABLE"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertTrue(rs.next()); + assertEquals(DateUtil.parseDate(date), rs.getDate(1)); + } finally { + conn.close(); + } + } + + @Test + public void testSelectLiteralDateCompare() throws Exception { + final String date = "2012-09-08"; + String query = "SELECT (DATE '" + date + "' = DATE '" + date + "') FROM ATABLE"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertTrue(rs.next()); + assertTrue(rs.getBoolean(1)); + } finally { + conn.close(); + } + } + + @Test + public void testSelectWhereDatesEqual() throws Exception { + final String date = "2012-09-08"; + String query = "SELECT entity_id FROM ATABLE WHERE a_integer < 4 AND DATE '" + date + "' = DATE '" + date + "'"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertTrue(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testSelectWhereDateAndToDateEqual() throws Exception { + final String date = "2012-09-08"; + String query = "SELECT entity_id FROM ATABLE WHERE a_integer < 4 AND DATE '" + date + "' = TO_DATE ('" + date + "')"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertTrue(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testSelectWhereDateAndTimestampEqual() throws Exception { + final String timestamp = "2012-09-08 07:08:23"; + String query = "SELECT entity_id FROM ATABLE WHERE a_integer < 4 AND DATE '" + timestamp + "' = TIMESTAMP '" + timestamp + "'"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertTrue(rs.next()); + } finally { + conn.close(); + } + } + + @Test + public void testSelectWhereSameDatesUnequal() throws Exception { + final String date = "2012-09-08"; + String query = "SELECT entity_id FROM ATABLE WHERE a_integer < 4 AND DATE '" + date + "' > DATE '" + date + "'"; + String url = getUrl() + ";" + PhoenixRuntime.CURRENT_SCN_ATTRIB + "=" + (ts + 5); // Run query at timestamp 5 + Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); + Connection conn = DriverManager.getConnection(url, props); + try { + Statement statement = conn.createStatement(); + ResultSet rs = statement.executeQuery(query); + assertFalse(rs.next()); + } finally { + conn.close(); + } + } + + @Test public void testSimpleInListStatement() throws Exception { String query = "SELECT entity_id FROM ATABLE WHERE organization_id=? AND a_integer IN (2,4)";