blob: 4f78b3ee6fc13b8d13995e98cf25ff6fea6ab379 [file] [log] [blame]
/*
* 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.junit.Assert.assertEquals;
import java.sql.*;
import org.apache.phoenix.schema.types.PTimestamp;
import org.apache.phoenix.schema.types.PhoenixArray;
import org.junit.Test;
public class ArraysWithNullsIT extends ParallelStatsDisabledIT {
@Test
public void testArrayUpsertIntWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t1 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t1 + " ( k VARCHAR PRIMARY KEY, a INTEGER[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t1 + " VALUES('a',ARRAY[null,3,null])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t1 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("INTEGER",new Object[]{null,3,null});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertVarcharWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t2 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t2 + " ( k VARCHAR PRIMARY KEY, a VARCHAR[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t2 + " VALUES('a',ARRAY['10',null])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t2 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("VARCHAR",new Object[]{"10",null});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertBigIntWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t3 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t3 + " ( k VARCHAR PRIMARY KEY, a BIGINT[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t3 + " VALUES('a',ARRAY[2,null,32335,4])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t3 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("BIGINT",new Object[]{(long)2,null,(long)32335,(long)4});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertFloatWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t4 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t4 + " ( k VARCHAR PRIMARY KEY, a FLOAT[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t4 + " VALUES('a',ARRAY[1.1,2.2,null,3.4])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t4 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("FLOAT",new Object[]{(float)1.1,(float)2.2,null,(float)3.4});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertSmallIntWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t5 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t5 + " ( k VARCHAR PRIMARY KEY, a SMALLINT[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t5 + " VALUES('a',ARRAY[123,456,null,456])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t5 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("SMALLINT",new Object[]{(short)123,(short)456,null,(short)456});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertTinyIntWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t6 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t6 + " ( k VARCHAR PRIMARY KEY, a TINYINT[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t6 + " VALUES('a',ARRAY[123,45,null,45])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t6 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("TINYINT",new Object[]{(byte)123,(byte)45,null,(byte)45});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertBooleanWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t7 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t7 + " ( k VARCHAR PRIMARY KEY, a BOOLEAN[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t7 + " VALUES('a',ARRAY[true,false,null,true])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t7 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("BOOLEAN",new Object[]{true,false,null,true});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertDoubleWithNulls() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t8 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t8 + " ( k VARCHAR PRIMARY KEY, a DOUBLE[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t8 + " VALUES('a',ARRAY[1.2,2.3,null,3.4])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t8 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("DOUBLE",new Object[]{1.2,2.3,null,3.4});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertDateWithNulls1() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t9 = generateUniqueName();
conn.createStatement().execute("CREATE TABLE " + t9 + " ( k VARCHAR PRIMARY KEY, a DATE[])");
PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + t9
+ " VALUES('a',ARRAY[TO_DATE('2015-05-20 06:12:14.184'),null,TO_DATE('2015-05-20 06:12:14.184'),null])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery("Select a from " + t9 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("DATE",new Date[]{new Date(1432102334184l),new Date(0l),new Date(1432102334184l),new Date(0l)});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertDateWithNulls2() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t10 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t10 + " ( k VARCHAR PRIMARY KEY, a DATE[])");
PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + t10
+ " VALUES('a',ARRAY[TO_DATE('1970-01-01 00:00:00.000'), TO_DATE('2015-05-20 06:12:14.184'),TO_DATE('2015-05-20 06:12:14.184')])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t10 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("DATE",new Date[]{new Date(0l), new Date(1432102334184l), new Date(1432102334184l)});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertTimeWithNulls1() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t11 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t11 + " ( k VARCHAR PRIMARY KEY, a TIME[])");
PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + t11
+ " VALUES('a',ARRAY[TO_TIME('2015-05-20 06:12:14.184'),null,TO_TIME('2015-05-20 06:12:14.184'),null])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t11 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("TIME",new Time[]{new Time(1432102334184l),new Time(0l),new Time(1432102334184l),new Time(0l)});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertTimeWithNulls2() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t12 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t12 + " ( k VARCHAR PRIMARY KEY, a TIME[])");
PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + t12
+ " VALUES('a',ARRAY[TO_TIME('1970-01-01 00:00:00.000'), TO_TIME('2015-05-20 06:12:14.184'),null,TO_TIME('2015-05-20 06:12:14.184'),null])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t12 + " where k = 'a'");
rs.next();
Array array = conn.createArrayOf("TIME",new Time[]{new Time(0l),new Time(1432102334184l),new Time(0l),new Time(1432102334184l),new Time(0l)});
assertEquals(rs.getArray(1),array);
conn.close();
}
@Test
public void testArrayUpsertTimeStampWithNulls1() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t13 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t13 + " ( k VARCHAR PRIMARY KEY, a TIMESTAMP[])");
PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + t13
+ " VALUES('a',ARRAY[TO_TIMESTAMP('2015-05-20 06:12:14.184'),null,TO_TIMESTAMP('2015-05-20 06:12:14.184'),TO_TIMESTAMP('1970-01-01 00:00:00.000')])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t13 + " where k = 'a'");
rs.next();
assertEquals(rs.getArray(1),conn.createArrayOf("TIMESTAMP",new Timestamp[]{new Timestamp(1432102334184l),new Timestamp(0l),new Timestamp(1432102334184l),new Timestamp(0l)}));
conn.close();
}
@Test
public void testArrayUpsertTimeStampWithNulls2() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t14 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t14 + " ( k VARCHAR PRIMARY KEY, a TIMESTAMP[])");
PreparedStatement stmt = conn.prepareStatement("UPSERT INTO " + t14
+ " VALUES('a',ARRAY[TO_TIMESTAMP('1970-01-01 00:00:00.000'),TO_TIMESTAMP('2015-05-20 06:12:14.184'),TO_TIMESTAMP('1970-01-01 00:00:00.000'),TO_TIMESTAMP('2015-05-20 06:12:14.184'),TO_TIMESTAMP('1970-01-01 00:00:00.000')])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t14 + " where k = 'a'");
rs.next();
assertEquals(rs.getArray(1),conn.createArrayOf("TIMESTAMP",new Timestamp[]{new Timestamp(0l),new Timestamp(1432102334184l),new Timestamp(0l),new Timestamp(1432102334184l),new Timestamp(0l)}));
conn.close();
}
@Test
public void testArrayUpsertCharWithNulls1() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t15 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t15 + " ( k VARCHAR PRIMARY KEY, a CHAR(15)[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t15 + " VALUES('a',ARRAY['foo',null,'fo','foo'])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t15 + " where k = 'a'");
rs.next();
assertEquals(rs.getArray(1),conn.createArrayOf("CHAR",new String[]{"foo","","fo","foo"}));
conn.close();
}
@Test
public void testArrayUpsertCharWithNulls2() throws Exception {
Connection conn = DriverManager.getConnection(getUrl());
String t16 = generateUniqueName();
conn.createStatement().execute(
"CREATE TABLE " + t16 + " ( k VARCHAR PRIMARY KEY, a CHAR(15)[])");
PreparedStatement stmt = conn.prepareStatement(
"UPSERT INTO " + t16 + " VALUES('a',ARRAY[null,'foo',null,'fo','foo'])");
stmt.execute();
conn.commit();
ResultSet rs = conn.createStatement().executeQuery(
"Select a from " + t16 + " where k = 'a'");
rs.next();
assertEquals(rs.getArray(1),conn.createArrayOf("CHAR",new String[]{"","foo","","fo","foo"}));
conn.close();
}
}