| /* |
| * 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.query.QueryConstants.MILLIS_IN_DAY; |
| import static org.apache.phoenix.util.TestUtil.ATABLE_NAME; |
| import static org.apache.phoenix.util.TestUtil.A_VALUE; |
| import static org.apache.phoenix.util.TestUtil.B_VALUE; |
| import static org.apache.phoenix.util.TestUtil.C_VALUE; |
| import static org.apache.phoenix.util.TestUtil.E_VALUE; |
| import static org.apache.phoenix.util.TestUtil.ROW1; |
| import static org.apache.phoenix.util.TestUtil.ROW2; |
| import static org.apache.phoenix.util.TestUtil.ROW3; |
| import static org.apache.phoenix.util.TestUtil.ROW4; |
| import static org.apache.phoenix.util.TestUtil.ROW5; |
| import static org.apache.phoenix.util.TestUtil.ROW6; |
| import static org.apache.phoenix.util.TestUtil.ROW7; |
| import static org.apache.phoenix.util.TestUtil.ROW8; |
| import static org.apache.phoenix.util.TestUtil.ROW9; |
| 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.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| 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.Time; |
| import java.sql.Timestamp; |
| import java.sql.Types; |
| import java.text.Format; |
| import java.util.Calendar; |
| import java.util.GregorianCalendar; |
| import java.util.Properties; |
| import java.util.TimeZone; |
| |
| import org.apache.commons.lang.time.FastDateFormat; |
| import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp; |
| import org.apache.hadoop.hbase.io.ImmutableBytesWritable; |
| import org.apache.hadoop.hbase.util.Bytes; |
| import org.apache.phoenix.compile.StatementContext; |
| import org.apache.phoenix.jdbc.PhoenixConnection; |
| import org.apache.phoenix.jdbc.PhoenixStatement; |
| import org.apache.phoenix.query.QueryConstants; |
| import org.apache.phoenix.schema.types.PDataType; |
| import org.apache.phoenix.schema.types.PDate; |
| import org.apache.phoenix.schema.types.PTime; |
| import org.apache.phoenix.schema.types.PTimestamp; |
| import org.apache.phoenix.util.ByteUtil; |
| import org.apache.phoenix.util.DateUtil; |
| import org.apache.phoenix.util.PropertiesUtil; |
| import org.apache.phoenix.util.TestUtil; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| |
| public class DateTimeIT extends ParallelStatsDisabledIT { |
| private static final String PRODUCT_METRICS_NAME = "PRODUCT_METRICS"; |
| private static final Date SPLIT1 = toDate("1970-01-01 01:30:00"); |
| private static final Date SPLIT2 = toDate("1970-01-01 02:00:00"); |
| private static final String R1 = "R1"; |
| private static final String R2 = "R2"; |
| |
| protected Connection conn; |
| protected Date date; |
| protected static final String tenantId = getOrganizationId(); |
| protected final static String ROW10 = "00D123122312312"; |
| protected String tableName; |
| |
| private static void initDateTableValues(String tablename, Connection conn, String tenantId, Date startDate) throws Exception { |
| double dateIncrement = 2.0; |
| PreparedStatement stmt = conn.prepareStatement( |
| "upsert into " +tablename+ |
| "(" + |
| " 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(); |
| } |
| |
| private static void initDateTableValues(String tablename, String tenantId, byte[][] splits, Date startDate) throws Exception { |
| ensureTableCreated(getUrl(), tablename, PRODUCT_METRICS_NAME, splits, null, null); |
| |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection conn = DriverManager.getConnection(getUrl(), props); |
| try { |
| initDateTableValues(tablename, conn, tenantId, startDate); |
| conn.commit(); |
| } finally { |
| conn.close(); |
| } |
| } |
| |
| |
| public DateTimeIT() throws Exception { |
| super(); |
| date = new Date(System.currentTimeMillis()); |
| } |
| |
| @Before |
| public void setUp() throws SQLException { |
| conn = DriverManager.getConnection(getUrl()); |
| this.tableName = initAtable(); |
| } |
| |
| @After |
| public void tearDown() throws SQLException { |
| conn.close(); |
| } |
| |
| private String initAtable() throws SQLException { |
| String tableName = generateUniqueName(); |
| ensureTableCreated(getUrl(), tableName, ATABLE_NAME, (byte[][])null, null); |
| PreparedStatement stmt = conn.prepareStatement( |
| "upsert into " + tableName + |
| "(" + |
| " ORGANIZATION_ID, " + |
| " ENTITY_ID, " + |
| " A_STRING, " + |
| " B_STRING, " + |
| " A_INTEGER, " + |
| " A_DATE, " + |
| " X_DECIMAL, " + |
| " X_LONG, " + |
| " X_INTEGER," + |
| " Y_INTEGER," + |
| " A_BYTE," + |
| " A_SHORT," + |
| " A_FLOAT," + |
| " A_DOUBLE," + |
| " A_UNSIGNED_FLOAT," + |
| " A_UNSIGNED_DOUBLE)" + |
| "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW1); |
| stmt.setString(3, A_VALUE); |
| stmt.setString(4, B_VALUE); |
| stmt.setInt(5, 1); |
| stmt.setDate(6, date); |
| stmt.setBigDecimal(7, null); |
| stmt.setNull(8, Types.BIGINT); |
| stmt.setNull(9, Types.INTEGER); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)1); |
| stmt.setShort(12, (short) 128); |
| stmt.setFloat(13, 0.01f); |
| stmt.setDouble(14, 0.0001); |
| stmt.setFloat(15, 0.01f); |
| stmt.setDouble(16, 0.0001); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW2); |
| stmt.setString(3, A_VALUE); |
| stmt.setString(4, C_VALUE); |
| stmt.setInt(5, 2); |
| stmt.setDate(6, date == null ? null : new Date(date.getTime() + MILLIS_IN_DAY * 1)); |
| stmt.setBigDecimal(7, null); |
| stmt.setNull(8, Types.BIGINT); |
| stmt.setNull(9, Types.INTEGER); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)2); |
| stmt.setShort(12, (short) 129); |
| stmt.setFloat(13, 0.02f); |
| stmt.setDouble(14, 0.0002); |
| stmt.setFloat(15, 0.02f); |
| stmt.setDouble(16, 0.0002); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW3); |
| stmt.setString(3, A_VALUE); |
| stmt.setString(4, E_VALUE); |
| stmt.setInt(5, 3); |
| stmt.setDate(6, date == null ? null : new Date(date.getTime() + MILLIS_IN_DAY * 2)); |
| stmt.setBigDecimal(7, null); |
| stmt.setNull(8, Types.BIGINT); |
| stmt.setNull(9, Types.INTEGER); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)3); |
| stmt.setShort(12, (short) 130); |
| stmt.setFloat(13, 0.03f); |
| stmt.setDouble(14, 0.0003); |
| stmt.setFloat(15, 0.03f); |
| stmt.setDouble(16, 0.0003); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW4); |
| stmt.setString(3, A_VALUE); |
| stmt.setString(4, B_VALUE); |
| stmt.setInt(5, 4); |
| stmt.setDate(6, date == null ? null : date); |
| stmt.setBigDecimal(7, null); |
| stmt.setNull(8, Types.BIGINT); |
| stmt.setNull(9, Types.INTEGER); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)4); |
| stmt.setShort(12, (short) 131); |
| stmt.setFloat(13, 0.04f); |
| stmt.setDouble(14, 0.0004); |
| stmt.setFloat(15, 0.04f); |
| stmt.setDouble(16, 0.0004); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW5); |
| stmt.setString(3, B_VALUE); |
| stmt.setString(4, C_VALUE); |
| stmt.setInt(5, 5); |
| stmt.setDate(6, date == null ? null : new Date(date.getTime() + MILLIS_IN_DAY * 1)); |
| stmt.setBigDecimal(7, null); |
| stmt.setNull(8, Types.BIGINT); |
| stmt.setNull(9, Types.INTEGER); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)5); |
| stmt.setShort(12, (short) 132); |
| stmt.setFloat(13, 0.05f); |
| stmt.setDouble(14, 0.0005); |
| stmt.setFloat(15, 0.05f); |
| stmt.setDouble(16, 0.0005); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW6); |
| stmt.setString(3, B_VALUE); |
| stmt.setString(4, E_VALUE); |
| stmt.setInt(5, 6); |
| stmt.setDate(6, date == null ? null : new Date(date.getTime() + MILLIS_IN_DAY * 2)); |
| stmt.setBigDecimal(7, null); |
| stmt.setNull(8, Types.BIGINT); |
| stmt.setNull(9, Types.INTEGER); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)6); |
| stmt.setShort(12, (short) 133); |
| stmt.setFloat(13, 0.06f); |
| stmt.setDouble(14, 0.0006); |
| stmt.setFloat(15, 0.06f); |
| stmt.setDouble(16, 0.0006); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW7); |
| stmt.setString(3, B_VALUE); |
| stmt.setString(4, B_VALUE); |
| stmt.setInt(5, 7); |
| stmt.setDate(6, date == null ? null : date); |
| stmt.setBigDecimal(7, BigDecimal.valueOf(0.1)); |
| stmt.setLong(8, 5L); |
| stmt.setInt(9, 5); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)7); |
| stmt.setShort(12, (short) 134); |
| stmt.setFloat(13, 0.07f); |
| stmt.setDouble(14, 0.0007); |
| stmt.setFloat(15, 0.07f); |
| stmt.setDouble(16, 0.0007); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW8); |
| stmt.setString(3, B_VALUE); |
| stmt.setString(4, C_VALUE); |
| stmt.setInt(5, 8); |
| stmt.setDate(6, date == null ? null : new Date(date.getTime() + MILLIS_IN_DAY * 1)); |
| stmt.setBigDecimal(7, BigDecimal.valueOf(3.9)); |
| long l = Integer.MIN_VALUE - 1L; |
| assert(l < Integer.MIN_VALUE); |
| stmt.setLong(8, l); |
| stmt.setInt(9, 4); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)8); |
| stmt.setShort(12, (short) 135); |
| stmt.setFloat(13, 0.08f); |
| stmt.setDouble(14, 0.0008); |
| stmt.setFloat(15, 0.08f); |
| stmt.setDouble(16, 0.0008); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW9); |
| stmt.setString(3, C_VALUE); |
| stmt.setString(4, E_VALUE); |
| stmt.setInt(5, 9); |
| stmt.setDate(6, date == null ? null : new Date(date.getTime() + MILLIS_IN_DAY * 2)); |
| stmt.setBigDecimal(7, BigDecimal.valueOf(3.3)); |
| l = Integer.MAX_VALUE + 1L; |
| assert(l > Integer.MAX_VALUE); |
| stmt.setLong(8, l); |
| stmt.setInt(9, 3); |
| stmt.setInt(10, 300); |
| stmt.setByte(11, (byte)9); |
| stmt.setShort(12, (short) 0); |
| stmt.setFloat(13, 0.09f); |
| stmt.setDouble(14, 0.0009); |
| stmt.setFloat(15, 0.09f); |
| stmt.setDouble(16, 0.0009); |
| stmt.execute(); |
| |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW10); |
| stmt.setString(3, B_VALUE); |
| stmt.setString(4, B_VALUE); |
| stmt.setInt(5, 7); |
| // Intentionally null |
| stmt.setDate(6, null); |
| stmt.setBigDecimal(7, BigDecimal.valueOf(0.1)); |
| stmt.setLong(8, 5L); |
| stmt.setInt(9, 5); |
| stmt.setNull(10, Types.INTEGER); |
| stmt.setByte(11, (byte)7); |
| stmt.setShort(12, (short) 134); |
| stmt.setFloat(13, 0.07f); |
| stmt.setDouble(14, 0.0007); |
| stmt.setFloat(15, 0.07f); |
| stmt.setDouble(16, 0.0007); |
| stmt.execute(); |
| |
| conn.commit(); |
| return tableName; |
| |
| } |
| |
| @Test |
| public void selectBetweenDates() 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 tableName = generateUniqueName(); |
| String today = formatter.format(dateToday); |
| String tomorrow = formatter.format(dateTomorrow); |
| String query = "SELECT entity_id FROM " + this.tableName + " WHERE a_integer < 4 AND a_date BETWEEN date '" + today + "' AND date '" + tomorrow + "' "; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| assertEquals(ROW1, rs.getString(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testNowWithSubquery() throws Exception { |
| String query = |
| "SELECT now(), reference_date FROM (select now() as " |
| + "reference_date union all select now() as reference_date) limit 1"; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| assertTrue(Math.abs(rs.getTime(1).getTime()-rs.getTime(2).getTime())<10000); |
| assertEquals(rs.getDate(2).toString(), rs.getDate(1).toString()); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testSelectLiteralDate() throws Exception { |
| String s = DateUtil.DEFAULT_DATE_FORMATTER.format(date); |
| String query = "SELECT DATE '" + s + "' FROM " + this.tableName; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| assertEquals(date, rs.getDate(1)); |
| } |
| |
| @Test |
| public void testSelectLiteralDateCompare() throws Exception { |
| String query = "SELECT (DATE '" + date + "' = DATE '" + date + "') FROM " + this.tableName; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| assertTrue(rs.getBoolean(1)); |
| } |
| |
| @Test |
| public void testSelectWhereDatesEqual() throws Exception { |
| String query = "SELECT entity_id FROM " + this.tableName + " WHERE a_integer < 4 AND DATE '" + date + "' = DATE '" + date + "'"; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| |
| } |
| |
| @Test |
| public void testSelectWhereDateAndToDateEqual() throws Exception { |
| String query = "SELECT entity_id FROM " + this.tableName + " WHERE a_integer < 4 AND DATE '" + date + "' = TO_DATE ('" + date + "')"; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| |
| } |
| |
| @Test |
| public void testSelectWhereDateAndTimestampEqual() throws Exception { |
| final String timestamp = "2012-09-08 07:08:23"; |
| String query = "SELECT entity_id FROM " + this.tableName + " WHERE a_integer < 4 AND DATE '" + timestamp + "' = TIMESTAMP '" + timestamp + "'"; |
| |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| } |
| |
| @Test |
| public void testSelectWhereSameDatesUnequal() throws Exception { |
| String query = "SELECT entity_id FROM " + this.tableName + " WHERE a_integer < 4 AND DATE '" + date + "' > DATE '" + date + "'"; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testDateInList() throws Exception { |
| String query = "SELECT entity_id FROM " + this.tableName + " WHERE a_date IN (?,?) AND a_integer < 4"; |
| PreparedStatement statement = conn.prepareStatement(query); |
| statement.setDate(1, new Date(0)); |
| statement.setDate(2, date); |
| ResultSet rs = statement.executeQuery(); |
| assertTrue(rs.next()); |
| assertEquals(ROW1, rs.getString(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @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 " + this.tableName + " WHERE a_integer < 4 AND a_date BETWEEN date '" + today + "' AND date '" + tomorrow + "' "; |
| Statement statement = conn.createStatement(); |
| ResultSet rs = statement.executeQuery(query); |
| assertTrue(rs.next()); |
| assertEquals(ROW1, rs.getString(1)); |
| assertFalse(rs.next()); |
| } |
| |
| private static int callYearFunction(Connection conn, String invocation) throws SQLException { |
| Statement stmt = conn.createStatement(); |
| ResultSet rs = |
| stmt.executeQuery(String |
| .format("SELECT %s FROM \"SYSTEM\".\"CATALOG\" LIMIT 1", invocation)); |
| assertTrue(rs.next()); |
| int returnValue = rs.getInt(1); |
| assertFalse(rs.next()); |
| rs.close(); |
| stmt.close(); |
| return returnValue; |
| } |
| |
| private int callYearFunction(String invocation) throws SQLException { |
| return callYearFunction(conn, invocation); |
| } |
| |
| @Test |
| public void testYearFunctionDate() throws SQLException { |
| |
| assertEquals(2008, callYearFunction("\"YEAR\"(TO_DATE('2008-01-01', 'yyyy-MM-dd', 'local'))")); |
| |
| assertEquals(2004, |
| callYearFunction("\"YEAR\"(TO_DATE('2004-12-13 10:13:18', 'yyyy-MM-dd hh:mm:ss'))")); |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_DATE('2015-01-27T16:17:57+00:00'))")); |
| |
| assertEquals(2005, callYearFunction("\"YEAR\"(TO_DATE('2005-12-13 10:13:18'))")); |
| |
| assertEquals(2006, callYearFunction("\"YEAR\"(TO_DATE('2006-12-13'))")); |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_DATE('2015-W05'))")); |
| |
| assertEquals( |
| 2008, |
| callYearFunction("\"YEAR\"(TO_DATE('Sat, 3 Feb 2008 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'UTC'))")); |
| } |
| |
| @Test |
| public void testYearFunctionTimestamp() throws SQLException { |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_TIMESTAMP('2015-01-27T16:17:57+00:00'))")); |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_TIMESTAMP('2015-01-27T16:17:57Z'))")); |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_TIMESTAMP('2015-W10-3'))")); |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_TIMESTAMP('2015-W05'))")); |
| |
| assertEquals(2015, callYearFunction("\"YEAR\"(TO_TIMESTAMP('2015-063'))")); |
| |
| assertEquals(2006, callYearFunction("\"YEAR\"(TO_TIMESTAMP('2006-12-13'))")); |
| |
| assertEquals(2004, |
| callYearFunction("\"YEAR\"(TO_TIMESTAMP('2004-12-13 10:13:18', 'yyyy-MM-dd hh:mm:ss'))")); |
| |
| assertEquals( |
| 2008, |
| callYearFunction("\"YEAR\"(TO_TIMESTAMP('Sat, 3 Feb 2008 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'UTC'))")); |
| } |
| |
| @Test |
| public void testYearFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME, " + |
| "unsignedDates UNSIGNED_DATE, unsignedTimestamps UNSIGNED_TIMESTAMP, unsignedTimes UNSIGNED_TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2004-03-01 00:00:00'), TO_TIMESTAMP('2006-02-01 00:00:00'), TO_TIME('2008-02-01 00:00:00'), " + |
| "TO_DATE('2010-03-01 00:00:00:896', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-02-01'), TO_TIME('2015-02-01 00:00:00'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2005-03-01 00:00:00'), TO_TIMESTAMP('2006-02-01 00:00:00'), TO_TIME('2008-02-01 00:00:00'), " + |
| "TO_DATE('2010-03-01 00:00:00:896', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-02-01'), TO_TIME('2015-02-01 00:00:00'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (3, TO_DATE('2006-03-01 00:00:00'), TO_TIMESTAMP('2006-02-01 00:00:00'), TO_TIME('2008-02-01 00:00:00'), " + |
| "TO_DATE('2010-03-01 00:00:00:896', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-02-01'), TO_TIME('2015-02-01 00:00:00'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, \"YEAR\"(timestamps), \"YEAR\"(times), \"YEAR\"(unsignedDates), \"YEAR\"(unsignedTimestamps), " + |
| "\"YEAR\"(unsignedTimes) FROM " + tableName + " where \"YEAR\"(dates) = 2004"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(2006, rs.getInt(2)); |
| assertEquals(2008, rs.getInt(3)); |
| assertEquals(2010, rs.getInt(4)); |
| assertEquals(2012, rs.getInt(5)); |
| assertEquals(2015, rs.getInt(6)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testMonthFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME, " + |
| "unsignedDates UNSIGNED_DATE, unsignedTimestamps UNSIGNED_TIMESTAMP, unsignedTimes UNSIGNED_TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2004-03-10 00:00:00'), TO_TIMESTAMP('2006-04-12 00:00:00'), TO_TIME('2008-05-16 00:00:00'), " + |
| "TO_DATE('2010-06-20 00:00:00:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:00:00'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2004-04-10 00:00:00'), TO_TIMESTAMP('2006-04-12 00:00:00'), TO_TIME('2008-05-16 00:00:00'), " + |
| "TO_DATE('2010-06-20 00:00:00:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:00:00'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (3, TO_DATE('2004-05-10 00:00:00'), TO_TIMESTAMP('2006-04-12 00:00:00'), TO_TIME('2008-05-16 00:00:00'), " + |
| "TO_DATE('2010-06-20 00:00:00:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:00:00'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, \"MONTH\"(timestamps), \"MONTH\"(times), \"MONTH\"(unsignedDates), \"MONTH\"(unsignedTimestamps), " + |
| "\"MONTH\"(unsignedTimes) FROM " + tableName + " where \"MONTH\"(dates) = 3"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(4, rs.getInt(2)); |
| assertEquals(5, rs.getInt(3)); |
| assertEquals(6, rs.getInt(4)); |
| assertEquals(7, rs.getInt(5)); |
| assertEquals(12, rs.getInt(6)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testUnsignedTimeDateWithLiteral() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL," + |
| "unsignedDates UNSIGNED_DATE, unsignedTimestamps UNSIGNED_TIMESTAMP, unsignedTimes UNSIGNED_TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, " + |
| "'2010-06-20 12:00:00', '2012-07-28 12:00:00', '2015-12-25 12:00:00')"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, unsignedDates, " + |
| "unsignedTimestamps, unsignedTimes FROM " + tableName + " where k1 = 1"); |
| assertTrue(rs.next()); |
| assertEquals(DateUtil.parseDate("2010-06-20 12:00:00"), rs.getDate(2)); |
| assertEquals(DateUtil.parseTimestamp("2012-07-28 12:00:00"), rs.getTimestamp(3)); |
| assertEquals(DateUtil.parseTime("2015-12-25 12:00:00"), rs.getTime(4)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testSecondFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME, " + |
| "unsignedDates UNSIGNED_DATE, unsignedTimestamps UNSIGNED_TIMESTAMP, unsignedTimes UNSIGNED_TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2004-03-01 00:00:10'), TO_TIMESTAMP('2006-04-12 00:00:20'), TO_TIME('2008-05-16 10:00:30'), " + |
| "TO_DATE('2010-06-20 00:00:40:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:00:50'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2004-03-01 00:00:10'), TO_TIMESTAMP('2006-04-12 00:20:30'), TO_TIME('2008-05-16 10:00:30'), " + |
| "TO_DATE('2010-06-20 00:00:40:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:00:50'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (3, TO_DATE('2004-03-01 00:00:10'), TO_TIMESTAMP('2006-04-12 00:50:30'), TO_TIME('2008-05-16 10:00:30'), " + |
| "TO_DATE('2010-06-20 00:00:40:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:00:50'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, SECOND(dates), SECOND(times), SECOND(unsignedDates), SECOND(unsignedTimestamps), " + |
| "SECOND(unsignedTimes) FROM " + tableName + " where SECOND(timestamps)=20"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(10, rs.getInt(2)); |
| assertEquals(30, rs.getInt(3)); |
| assertEquals(40, rs.getInt(4)); |
| assertEquals(0, rs.getInt(5)); |
| assertEquals(50, rs.getInt(6)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testWeekFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2004-01-10 10:00:10'), TO_TIMESTAMP('2006-04-12 08:00:20'), TO_TIME('2008-05-16 10:00:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2004-01-10 10:00:10'), TO_TIMESTAMP('2006-05-18 08:00:20'), TO_TIME('2008-05-16 10:00:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (3, TO_DATE('2004-01-10 10:00:10'), TO_TIMESTAMP('2006-05-18 08:00:20'), TO_TIME('2008-05-16 10:00:30'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, \"WEEK\"(dates), \"WEEK\"(times) FROM " + tableName + " where \"WEEK\"(timestamps)=15"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(2, rs.getInt(2)); |
| assertEquals(20, rs.getInt(3)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testHourFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('Sat, 3 Feb 2008 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'UTC'), TO_TIMESTAMP('2006-04-12 15:10:20'), " + |
| "TO_TIME('2008-05-16 20:40:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('Sat, 3 Feb 2008 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'UTC'), TO_TIMESTAMP('2006-04-12 10:10:20'), " + |
| "TO_TIME('2008-05-16 20:40:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (3, TO_DATE('Sat, 3 Feb 2008 03:05:06 GMT', 'EEE, d MMM yyyy HH:mm:ss z', 'UTC'), TO_TIMESTAMP('2006-04-12 08:10:20'), " + |
| "TO_TIME('2008-05-16 20:40:30'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, \"HOUR\"(dates), \"HOUR\"(times) FROM " + tableName + " where \"HOUR\"(timestamps)=15"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(3, rs.getInt(2)); |
| assertEquals(20, rs.getInt(3)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testNowFunction() throws Exception { |
| String tableName = generateUniqueName(); |
| Date date = new Date(System.currentTimeMillis()); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, timestamps TIMESTAMP CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (?, ?)"; |
| PreparedStatement stmt = conn.prepareStatement(dml); |
| stmt.setInt(1, 1); |
| stmt.setDate(2, new Date(date.getTime()-500)); |
| stmt.execute(); |
| stmt.setInt(1, 2); |
| stmt.setDate(2, new Date(date.getTime()+600000)); |
| stmt.execute(); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT * from " + tableName + " where now() > timestamps"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(new Date(date.getTime()-500), rs.getDate(2)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testMinuteFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME, " + |
| "unsignedDates UNSIGNED_DATE, unsignedTimestamps UNSIGNED_TIMESTAMP, unsignedTimes UNSIGNED_TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2004-03-01 00:10:10'), TO_TIMESTAMP('2006-04-12 00:20:20'), TO_TIME('2008-05-16 10:30:30'), " + |
| "TO_DATE('2010-06-20 00:40:40:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:50:50'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2004-03-01 00:10:10'), TO_TIMESTAMP('2006-04-12 00:50:20'), TO_TIME('2008-05-16 10:30:30'), " + |
| "TO_DATE('2010-06-20 00:40:40:789', 'yyyy-MM-dd HH:mm:ss:SSS'), TO_TIMESTAMP('2012-07-28'), TO_TIME('2015-12-25 00:50:50'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, \"MINUTE\"(dates), \"MINUTE\"(times), \"MINUTE\"(unsignedDates), \"MINUTE\"(unsignedTimestamps), " + |
| "\"MINUTE\"(unsignedTimes) FROM " + tableName + " where \"MINUTE\"(timestamps)=20"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(10, rs.getInt(2)); |
| assertEquals(30, rs.getInt(3)); |
| assertEquals(40, rs.getInt(4)); |
| assertEquals(0, rs.getInt(5)); |
| assertEquals(50, rs.getInt(6)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testDayOfMonthFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2004-01-08 10:00:10'), TO_TIMESTAMP('2006-04-12 08:00:20'), TO_TIME('2008-05-26 11:00:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2004-01-18 10:00:10'), TO_TIMESTAMP('2006-05-22 08:00:20'), TO_TIME('2008-12-30 11:00:30'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, DAYOFMONTH(dates), DAYOFMONTH(times) FROM " + tableName + " where DAYOFMONTH(timestamps)=12"); |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(8, rs.getInt(2)); |
| assertEquals(26, rs.getInt(3)); |
| assertFalse(rs.next()); |
| } |
| |
| /* |
| Reference for dates used in the test |
| 2013-04-09 - Tuesday (2) |
| 2014-05-18 - Sunday (7) |
| 2015-06-27 - Saturday (6) |
| */ |
| @Test |
| public void testDayOfWeekFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2012-03-08 11:01:10'), TO_TIMESTAMP('2013-06-16 12:02:20'), TO_TIME('2014-09-23 13:03:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2013-04-09 11:02:10'), TO_TIMESTAMP('2014-05-18 12:03:20'), TO_TIME('2015-06-27 13:04:30'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, DAYOFWEEK(dates), DAYOFWEEK(timestamps) FROM " + tableName + " where DAYOFWEEK(times)=6"); |
| assertTrue(rs.next()); |
| assertEquals(2, rs.getInt(1)); |
| assertEquals(2, rs.getInt(2)); |
| assertEquals(7, rs.getInt(3)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testDayOfYearFuncAgainstColumns() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL, dates DATE, timestamps TIMESTAMP, times TIME CONSTRAINT pk PRIMARY KEY (k1))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TO_DATE('2012-03-01 11:01:10'), TO_TIMESTAMP('2013-02-01 12:02:20'), TO_TIME('2014-01-15 13:03:30'))"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TO_DATE('2013-04-09 11:02:10'), TO_TIMESTAMP('2014-05-18 12:03:20'), TO_TIME('2015-06-27 13:04:30'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1, DAYOFYEAR(dates), DAYOFYEAR(timestamps) FROM " + tableName + " where DAYOFYEAR(times)=15"); |
| |
| assertTrue(rs.next()); |
| assertEquals(1, rs.getInt(1)); |
| assertEquals(61, rs.getInt(2)); |
| assertEquals(32, rs.getInt(3)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testNullDate() throws Exception { |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT a_date, entity_id from " + this.tableName + " WHERE entity_id = '" + ROW10 + "'"); |
| assertNotNull(rs); |
| assertTrue(rs.next()); |
| assertEquals(ROW10, rs.getString(2)); |
| assertNull(rs.getDate(1)); |
| assertNull(rs.getDate(1, GregorianCalendar.getInstance())); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testCurrentDateWithNoTable() throws Exception { |
| long expectedTime = System.currentTimeMillis(); |
| ResultSet rs = conn.createStatement().executeQuery("SELECT CURRENT_DATE()"); |
| assertTrue(rs.next()); |
| long actualTime = rs.getDate(1).getTime(); |
| assertTrue(Math.abs(actualTime - expectedTime) < MILLIS_IN_DAY); |
| } |
| @Test |
| public void testSelectBetweenNanos() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER NOT NULL PRIMARY KEY, ts " + |
| "TIMESTAMP(3))"; |
| conn.createStatement().execute(ddl); |
| String dml = "UPSERT INTO " + tableName + " VALUES (1, TIMESTAMP'2015-01-01 00:00:00.111111111')"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (2, TIMESTAMP'2015-01-01 00:00:00.111111115')"; |
| conn.createStatement().execute(dml); |
| dml = "UPSERT INTO " + tableName + " VALUES (3, TIMESTAMP'2015-01-01 00:00:00.111111113')"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT k1,ts from " + tableName + " where ts between" + |
| " TIMESTAMP'2015-01-01 00:00:00.111111112' AND TIMESTAMP'2015-01-01 00:00:00" + |
| ".111111114'"); |
| assertTrue(rs.next()); |
| assertEquals(3, rs.getInt(1)); |
| assertEquals(111111113, rs.getTimestamp(2).getNanos()); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testCurrentTimeWithProjectedTable () throws Exception { |
| String tableName1 = generateUniqueName(); |
| String tableName2 = generateUniqueName(); |
| String ddl = "CREATE TABLE " + tableName1 + " ( ID integer primary key)"; |
| conn.createStatement().execute(ddl); |
| ddl = "CREATE TABLE " + tableName2 + " ( ID integer primary key)"; |
| conn.createStatement().execute(ddl); |
| String ups = "UPSERT INTO " + tableName1 + " VALUES (1)"; |
| conn.createStatement().execute(ups); |
| ups = "UPSERT INTO " + tableName2 + " VALUES (1)"; |
| conn.createStatement().execute(ups); |
| conn.commit(); |
| ResultSet rs = conn.createStatement().executeQuery("select /*+ USE_SORT_MERGE_JOIN */ op" + |
| ".id, current_time() from " +tableName1 + " op where op.id in (select id from " + tableName2 + ")"); |
| assertTrue(rs.next()); |
| assertEquals(new java.util.Date().getYear(),rs.getTimestamp(2).getYear()); |
| } |
| |
| @Test |
| public void testLiteralDateComparison() throws Exception { |
| ResultSet rs = |
| conn.createStatement().executeQuery( |
| "select DATE '2016-05-10 00:00:00' > DATE '2016-05-11 00:00:00'"); |
| |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testLiteralTimestampComparison() throws Exception { |
| ResultSet rs = |
| conn.createStatement().executeQuery( |
| "select TIMESTAMP '2016-05-10 00:00:00' > TIMESTAMP '2016-05-11 00:00:00'"); |
| |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testLiteralDateTimestampComparison() throws Exception { |
| ResultSet rs = |
| conn.createStatement().executeQuery( |
| "select \"DATE\" '2016-05-10 00:00:00' > \"TIMESTAMP\" '2016-05-11 00:00:00'"); |
| |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testLiteralDateTimestampComparison2() throws Exception { |
| ResultSet rs = |
| conn.createStatement().executeQuery( |
| "select \"TIMESTAMP\" '2016-05-10 00:00:00' > \"DATE\" '2016-05-11 00:00:00'"); |
| |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testFunctionOnNullDate() throws Exception { |
| ResultSet rs = conn.createStatement().executeQuery("SELECT \"YEAR\"(a_date), entity_id from " + this.tableName + " WHERE entity_id = '" + ROW10 + "'"); |
| assertNotNull(rs); |
| assertTrue(rs.next()); |
| assertEquals(ROW10, rs.getString(2)); |
| assertNull(rs.getDate(1)); |
| assertNull(rs.getDate(1, GregorianCalendar.getInstance())); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedDateTimestampUnequal() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates DATE, timestamps TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setDate(2, new Date(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedTimeTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, times TIME, timestamps TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIME('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setTime(2, new Time(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT times = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedDateTimeCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates DATE, times TIME)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIME('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = times FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedDateUnsignedTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates DATE, timestamps UNSIGNED_TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setDate(2, new Date(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedTimeUnsignedTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, times TIME, timestamps UNSIGNED_TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIME('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setTime(2, new Time(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT times = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedDateUnsignedTimeCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates DATE, times UNSIGNED_TIME)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIME('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = times FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedDateTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates UNSIGNED_DATE, timestamps TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setDate(2, new Date(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedTimeTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, times UNSIGNED_TIME, timestamps TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIME('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setTime(2, new Time(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT times = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedDateTimeCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates UNSIGNED_DATE, times TIME)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIME('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = times FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedDateUnsignedTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates UNSIGNED_DATE, timestamps UNSIGNED_TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setDate(2, new Date(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedTimeUnsignedTimestampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, times UNSIGNED_TIME, timestamps UNSIGNED_TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIME('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| stmt.setTime(2, new Time(1000)); |
| Timestamp ts = new Timestamp(1000); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT times = timestamps FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedDateUnsignedTimeCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, dates UNSIGNED_DATE, times UNSIGNED_TIME)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_TIME('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT dates = times FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedDateDateCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, date1 DATE, date2 DATE)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_DATE('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_DATE('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_DATE('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT date1 = date2 FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedDateUnsignedDateCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, date1 UNSIGNED_DATE, date2 UNSIGNED_DATE)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_DATE('2004-02-04 00:10:10')," + |
| "TO_DATE('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_DATE('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_DATE('2004-02-04 00:10:10'), " + |
| "TO_DATE('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT date1 = date2 FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedTimeTimeCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, time1 TIME, time2 TIME)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIME('2004-02-04 00:10:10')," + |
| "TO_TIME('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT time1 = time2 FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedTimeUnsignedTimeCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, time1 UNSIGNED_TIME, time2 UNSIGNED_TIME)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIME('2004-02-04 00:10:10')," + |
| "TO_TIME('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (3," + |
| "TO_TIME('2004-02-04 00:10:10'), " + |
| "TO_TIME('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT time1 = time2 FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedTimeStampTimeStampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, timestamp1 TIMESTAMP, timestamp2 TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIMESTAMP('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| Timestamp ts = new Timestamp(1000); |
| stmt.setTimestamp(2, ts); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT timestamp1 = timestamp2 FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| @Test |
| public void testProjectedUnsignedTimeStampUnsignedTimeStampCompare() throws Exception { |
| String tableName = generateUniqueName(); |
| String ddl = |
| "CREATE TABLE IF NOT EXISTS " + tableName + " (k1 INTEGER PRIMARY KEY, timestamp1 UNSIGNED_TIMESTAMP, timestamp2 UNSIGNED_TIMESTAMP)"; |
| conn.createStatement().execute(ddl); |
| // Differ by date |
| String dml = "UPSERT INTO " + tableName + " VALUES (1," + |
| "TO_TIMESTAMP('2004-02-04 00:10:10')," + |
| "TO_TIMESTAMP('2006-04-12 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| // Differ by time |
| dml = "UPSERT INTO " + tableName + " VALUES (2," + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 15:10:20'))"; |
| conn.createStatement().execute(dml); |
| // Differ by nanoseconds |
| PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES (?, ?, ?)"); |
| stmt.setInt(1, 3); |
| Timestamp ts = new Timestamp(1000); |
| stmt.setTimestamp(2, ts); |
| ts.setNanos(100); |
| stmt.setTimestamp(3, ts); |
| stmt.execute(); |
| // Equality |
| dml = "UPSERT INTO " + tableName + " VALUES (4," + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'), " + |
| "TO_TIMESTAMP('2004-02-04 00:10:10'))"; |
| conn.createStatement().execute(dml); |
| conn.commit(); |
| |
| ResultSet rs = conn.createStatement().executeQuery("SELECT timestamp1 = timestamp2 FROM " + tableName); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(false, rs.getBoolean(1)); |
| assertTrue(rs.next()); |
| assertEquals(true, rs.getBoolean(1)); |
| assertFalse(rs.next()); |
| } |
| |
| private static byte[][] getSplits(String tenantId) { |
| return new byte[][] { |
| ByteUtil.concat(Bytes.toBytes(tenantId), PDate.INSTANCE.toBytes(SPLIT1)), |
| ByteUtil.concat(Bytes.toBytes(tenantId), PDate.INSTANCE.toBytes(SPLIT2)), |
| }; |
| } |
| |
| private static Date toDate(String dateString) { |
| return DateUtil.parseDate(dateString); |
| } |
| |
| @Test |
| public void testDateSubtractionCompareNumber() throws Exception { |
| String tablename=generateUniqueName(); |
| String tenantId = getOrganizationId(); |
| String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and ? - \"DATE\" > 3"; |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection conn = DriverManager.getConnection(getUrl(), props); |
| try { |
| Date startDate = new Date(System.currentTimeMillis()); |
| Date endDate = new Date(startDate.getTime() + 6 * QueryConstants.MILLIS_IN_DAY); |
| initDateTableValues(tablename, tenantId, getSplits(tenantId), 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 { |
| String tablename=generateUniqueName(); |
| String tenantId = getOrganizationId(); |
| String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and ? - \"DATE\" - 1.5 > 3"; |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection conn = DriverManager.getConnection(getUrl(), props); |
| try { |
| Date startDate = new Date(System.currentTimeMillis()); |
| Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY); |
| initDateTableValues(tablename, tenantId, getSplits(tenantId), 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 { |
| String tablename=generateUniqueName(); |
| String tenantId = getOrganizationId(); |
| String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and date - 1 >= ?"; |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection conn = DriverManager.getConnection(getUrl(), props); |
| try { |
| Date startDate = new Date(System.currentTimeMillis()); |
| Date endDate = new Date(startDate.getTime() + 9 * QueryConstants.MILLIS_IN_DAY); |
| initDateTableValues(tablename, tenantId, getSplits(tenantId), 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 { |
| String tablename=generateUniqueName(); |
| String tenantId = getOrganizationId(); |
| String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and date + 1 >= ?"; |
| Connection conn = DriverManager.getConnection(url); |
| try { |
| Date startDate = new Date(System.currentTimeMillis()); |
| Date endDate = new Date(startDate.getTime() + 8 * QueryConstants.MILLIS_IN_DAY); |
| initDateTableValues(tablename, tenantId, getSplits(tenantId), 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 { |
| String tablename=generateUniqueName(); |
| String tenantId = getOrganizationId(); |
| String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and \"DATE\" - current_date() > 8"; |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection conn = DriverManager.getConnection(getUrl(), props); |
| try { |
| Date startDate = new Date(System.currentTimeMillis()); |
| initDateTableValues(tablename, tenantId, getSplits(tenantId), 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 { |
| String tablename=generateUniqueName(); |
| String tenantId = getOrganizationId(); |
| String query = "SELECT feature FROM "+tablename+" WHERE organization_id = ? and \"DATE\" - current_time() > 8"; |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection conn = DriverManager.getConnection(getUrl(), props); |
| try { |
| Date startDate = new Date(System.currentTimeMillis()); |
| initDateTableValues(tablename, tenantId, getSplits(tenantId), 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 testTimestamp() throws Exception { |
| String updateStmt = |
| "upsert into " + tableName + |
| " (" + |
| " ORGANIZATION_ID, " + |
| " ENTITY_ID, " + |
| " A_TIMESTAMP) " + |
| "VALUES (?, ?, ?)"; |
| // Override value that was set at creation time |
| Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); |
| Connection upsertConn = DriverManager.getConnection(url, props); |
| upsertConn.setAutoCommit(true); // Test auto commit |
| PreparedStatement stmt = upsertConn.prepareStatement(updateStmt); |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW4); |
| Timestamp tsValue1 = new Timestamp(5000); |
| byte[] ts1 = PTimestamp.INSTANCE.toBytes(tsValue1); |
| stmt.setTimestamp(3, tsValue1); |
| stmt.execute(); |
| |
| Connection conn1 = DriverManager.getConnection(url, props); |
| TestUtil.analyzeTable(conn1, tableName); |
| conn1.close(); |
| |
| updateStmt = |
| "upsert into " + tableName + |
| " (" + |
| " ORGANIZATION_ID, " + |
| " ENTITY_ID, " + |
| " A_TIMESTAMP," + |
| " A_TIME) " + |
| "VALUES (?, ?, ?, ?)"; |
| stmt = upsertConn.prepareStatement(updateStmt); |
| stmt.setString(1, tenantId); |
| stmt.setString(2, ROW5); |
| Timestamp tsValue2 = new Timestamp(5000); |
| tsValue2.setNanos(200); |
| byte[] ts2 = PTimestamp.INSTANCE.toBytes(tsValue2); |
| stmt.setTimestamp(3, tsValue2); |
| stmt.setTime(4, new Time(tsValue2.getTime())); |
| stmt.execute(); |
| upsertConn.close(); |
| |
| assertTrue(TestUtil.compare(CompareOp.GREATER, new ImmutableBytesWritable(ts2), new ImmutableBytesWritable(ts1))); |
| assertFalse(TestUtil.compare(CompareOp.GREATER, new ImmutableBytesWritable(ts1), new ImmutableBytesWritable(ts1))); |
| |
| String query = "SELECT entity_id, a_timestamp, a_time FROM " + tableName + " WHERE organization_id=? and a_timestamp > ?"; |
| Connection conn = DriverManager.getConnection(url, props); |
| try { |
| PreparedStatement statement = conn.prepareStatement(query); |
| statement.setString(1, tenantId); |
| statement.setTimestamp(2, new Timestamp(5000)); |
| ResultSet rs = statement.executeQuery(); |
| assertTrue (rs.next()); |
| assertEquals(rs.getString(1), ROW5); |
| assertEquals(rs.getTimestamp("A_TIMESTAMP"), tsValue2); |
| assertEquals(rs.getTime("A_TIME"), new Time(tsValue2.getTime())); |
| assertFalse(rs.next()); |
| } finally { |
| conn.close(); |
| } |
| } |
| |
| @Test |
| public void testDateFormatTimeZone()throws Exception { |
| String[] timeZoneIDs = {DateUtil.DEFAULT_TIME_ZONE_ID, "Asia/Yerevan", "Australia/Adelaide", "Asia/Tokyo"}; |
| for (String timeZoneID : timeZoneIDs) { |
| testDateFormatTimeZone(timeZoneID); |
| } |
| } |
| |
| public void testDateFormatTimeZone(String timeZoneId) throws Exception { |
| Properties props = new Properties(); |
| props.setProperty("phoenix.query.dateFormatTimeZone", timeZoneId); |
| Connection conn1 = DriverManager.getConnection(getUrl(), props); |
| |
| String tableName = generateUniqueName(); |
| String ddl = "CREATE TABLE IF NOT EXISTS " + tableName + |
| " (k1 INTEGER PRIMARY KEY," + |
| " v_date DATE," + |
| " v_time TIME," + |
| " v_timestamp TIMESTAMP)"; |
| try { |
| conn1.createStatement().execute(ddl); |
| |
| PhoenixConnection pConn = conn1.unwrap(PhoenixConnection.class); |
| verifyTimeZoneIDWithConn(pConn, PDate.INSTANCE, timeZoneId); |
| verifyTimeZoneIDWithConn(pConn, PTime.INSTANCE, timeZoneId); |
| verifyTimeZoneIDWithConn(pConn, PTimestamp.INSTANCE, timeZoneId); |
| |
| Calendar cal = Calendar.getInstance(TimeZone.getTimeZone(timeZoneId)); |
| cal.setTime(date); |
| String dateStr = DateUtil.getDateFormatter(DateUtil.DEFAULT_MS_DATE_FORMAT).format(date); |
| |
| String dml = "UPSERT INTO " + tableName + " VALUES (" + |
| "1," + |
| "'" + dateStr + "'," + |
| "'" + dateStr + "'," + |
| "'" + dateStr + "'" + |
| ")"; |
| conn1.createStatement().execute(dml); |
| conn1.commit(); |
| |
| PhoenixStatement stmt = conn1.createStatement().unwrap(PhoenixStatement.class); |
| ResultSet rs = stmt.executeQuery("SELECT v_date, v_time, v_timestamp FROM " + tableName); |
| |
| assertTrue(rs.next()); |
| assertEquals(rs.getDate(1).toString(), new Date(cal.getTimeInMillis()).toString()); |
| assertEquals(rs.getTime(2).toString(), new Time(cal.getTimeInMillis()).toString()); |
| assertEquals(rs.getTimestamp(3).getTime(), cal.getTimeInMillis()); |
| assertFalse(rs.next()); |
| |
| StatementContext stmtContext = stmt.getQueryPlan().getContext(); |
| verifyTimeZoneIDWithFormatter(stmtContext.getDateFormatter(), timeZoneId); |
| verifyTimeZoneIDWithFormatter(stmtContext.getTimeFormatter(), timeZoneId); |
| verifyTimeZoneIDWithFormatter(stmtContext.getTimestampFormatter(), timeZoneId); |
| |
| stmt.close(); |
| } finally { |
| conn1.close(); |
| } |
| } |
| |
| private void verifyTimeZoneIDWithConn(PhoenixConnection conn, PDataType dataType, String timeZoneId) { |
| Format formatter = conn.getFormatter(dataType); |
| verifyTimeZoneIDWithFormatter(formatter, timeZoneId); |
| } |
| |
| private void verifyTimeZoneIDWithFormatter(Format formatter, String timeZoneId) { |
| assertTrue(formatter instanceof FastDateFormat); |
| assertEquals(((FastDateFormat)formatter).getTimeZone().getID(), timeZoneId); |
| } |
| } |