/* * Licensed 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 com.facebook.presto.accumulo.model; import com.facebook.presto.accumulo.serializers.AccumuloRowSerializer; import com.facebook.presto.type.ArrayType; import com.google.common.collect.ImmutableList; import org.testng.annotations.Test; import java.sql.Date; import java.sql.Timestamp; import java.util.GregorianCalendar; import java.util.Optional; import static com.facebook.presto.spi.type.BigintType.BIGINT; import static com.facebook.presto.spi.type.BooleanType.BOOLEAN; import static com.facebook.presto.spi.type.DateType.DATE; import static com.facebook.presto.spi.type.DoubleType.DOUBLE; import static com.facebook.presto.spi.type.IntegerType.INTEGER; import static com.facebook.presto.spi.type.RealType.REAL; import static com.facebook.presto.spi.type.SmallintType.SMALLINT; import static com.facebook.presto.spi.type.TimeType.TIME; import static com.facebook.presto.spi.type.TimestampType.TIMESTAMP; import static com.facebook.presto.spi.type.TinyintType.TINYINT; import static com.facebook.presto.spi.type.VarbinaryType.VARBINARY; import static com.facebook.presto.spi.type.VarcharType.VARCHAR; import static java.nio.charset.StandardCharsets.UTF_8; import static org.testng.Assert.assertEquals; public class TestRow { @Test public void testRow() throws Exception { Row r1 = new Row(); r1.addField(new Field(AccumuloRowSerializer.getBlockFromArray(VARCHAR, ImmutableList.of("a", "b", "c")), new ArrayType(VARCHAR))); r1.addField(true, BOOLEAN); r1.addField(new Field(new Date(new GregorianCalendar(1999, 0, 1).getTime().getTime()), DATE)); r1.addField(123.45678, DOUBLE); r1.addField(new Field(123.45678f, REAL)); r1.addField(12345678, INTEGER); r1.addField(new Field(12345678L, BIGINT)); r1.addField(new Field((short) 12345, SMALLINT)); r1.addField(new GregorianCalendar(1999, 0, 1, 12, 30, 0).getTime().getTime(), TIME); r1.addField(new Field(new Timestamp(new GregorianCalendar(1999, 0, 1, 12, 30, 0).getTime().getTime()), TIMESTAMP)); r1.addField((byte) 123, TINYINT); r1.addField(new Field("O'Leary".getBytes(UTF_8), VARBINARY)); r1.addField("O'Leary", VARCHAR); r1.addField(null, VARCHAR); assertEquals(r1.length(), 14); assertEquals(r1.toString(), "(ARRAY ['a','b','c'],true,DATE '1999-01-01',123.45678,123.45678,12345678,12345678,12345,TIME '12:30:00',TIMESTAMP '1999-01-01 12:30:00.0',123,CAST('O''Leary' AS VARBINARY),'O''Leary',null)"); Row r2 = new Row(r1); assertEquals(r2, r1); } @Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessageRegExp = "type is null") public void testRowTypeIsNull() throws Exception { Row r1 = new Row(); r1.addField(VARCHAR, null); } @Test public void testRowFromString() throws Exception { Row expected = new Row(); expected.addField(new Field(AccumuloRowSerializer.getBlockFromArray(VARCHAR, ImmutableList.of("a", "b", "c")), new ArrayType(VARCHAR))); expected.addField(true, BOOLEAN); expected.addField(new Field(new Date(new GregorianCalendar(1999, 0, 1).getTime().getTime()), DATE)); expected.addField(123.45678, DOUBLE); expected.addField(new Field(123.45678f, REAL)); expected.addField(12345678, INTEGER); expected.addField(new Field(12345678L, BIGINT)); expected.addField(new Field((short) 12345, SMALLINT)); expected.addField(new GregorianCalendar(1999, 0, 1, 12, 30, 0).getTime().getTime(), TIME); expected.addField(new Field(new Timestamp(new GregorianCalendar(1999, 0, 1, 12, 30, 0).getTime().getTime()), TIMESTAMP)); expected.addField((byte) 123, TINYINT); expected.addField(new Field("O'Leary".getBytes(UTF_8), VARBINARY)); expected.addField("O'Leary", VARCHAR); expected.addField(null, VARCHAR); RowSchema schema = new RowSchema(); schema.addRowId("a", new ArrayType(VARCHAR)); schema.addColumn("b", Optional.of("b"), Optional.of("b"), BOOLEAN); schema.addColumn("c", Optional.of("c"), Optional.of("c"), DATE); schema.addColumn("d", Optional.of("d"), Optional.of("d"), DOUBLE); schema.addColumn("e", Optional.of("e"), Optional.of("e"), REAL); schema.addColumn("f", Optional.of("f"), Optional.of("f"), INTEGER); schema.addColumn("g", Optional.of("g"), Optional.of("g"), BIGINT); schema.addColumn("h", Optional.of("h"), Optional.of("h"), SMALLINT); schema.addColumn("i", Optional.of("i"), Optional.of("i"), TIME); schema.addColumn("j", Optional.of("j"), Optional.of("j"), TIMESTAMP); schema.addColumn("k", Optional.of("k"), Optional.of("k"), TINYINT); schema.addColumn("l", Optional.of("l"), Optional.of("l"), VARBINARY); schema.addColumn("m", Optional.of("m"), Optional.of("m"), VARCHAR); schema.addColumn("n", Optional.of("n"), Optional.of("n"), VARCHAR); Row actual = Row.fromString(schema, "a,b,c|true|1999-01-01|123.45678|123.45678|12345678|12345678|12345|12:30:00|1999-01-01 12:30:00.0|123|O'Leary|O'Leary|", '|'); assertEquals(actual, expected); } }