/** * 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.jena.jdbc.metadata.results; import java.math.BigDecimal; import java.sql.Date; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Time; import org.apache.jena.jdbc.metadata.results.MetaResultSet; import org.apache.jena.jdbc.results.metadata.columns.BooleanColumn; import org.apache.jena.jdbc.results.metadata.columns.ByteColumn; import org.apache.jena.jdbc.results.metadata.columns.ColumnInfo; import org.apache.jena.jdbc.results.metadata.columns.DateColumn; import org.apache.jena.jdbc.results.metadata.columns.DecimalColumn; import org.apache.jena.jdbc.results.metadata.columns.DoubleColumn; import org.apache.jena.jdbc.results.metadata.columns.FloatColumn; import org.apache.jena.jdbc.results.metadata.columns.IntegerColumn; import org.apache.jena.jdbc.results.metadata.columns.LongIntegerColumn; import org.apache.jena.jdbc.results.metadata.columns.ShortIntegerColumn; import org.apache.jena.jdbc.results.metadata.columns.StringColumn; import org.apache.jena.jdbc.results.metadata.columns.TimeColumn; import org.junit.Assert; import org.junit.Test; /** * Tests for the {@link MetaResultSet} * */ public class TestMetaResultSet { /** * Check empty meta result set * * @throws SQLException */ @Test public void empty_meta_result_set_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[0]); // Check results metadata ResultSetMetaData metadata = results.getMetaData(); Assert.assertEquals(0, metadata.getColumnCount()); // Check results Assert.assertTrue(results.isBeforeFirst()); Assert.assertFalse(results.next()); Assert.assertTrue(results.isAfterLast()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Check empty meta result set with a single column * * @throws SQLException */ @Test public void empty_meta_result_set_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new StringColumn("Test", ResultSetMetaData.columnNullable) }); // Check results metadata ResultSetMetaData metadata = results.getMetaData(); Assert.assertEquals(1, metadata.getColumnCount()); // Check results Assert.assertTrue(results.isBeforeFirst()); Assert.assertFalse(results.next()); Assert.assertTrue(results.isAfterLast()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Trying to create a meta result set with bad data is an error * * @throws SQLException */ @Test(expected = SQLException.class) public void meta_result_set_bad_01() throws SQLException { // Every row must have the correct number of columns new MetaResultSet(new ColumnInfo[] { new StringColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { {} }); } private MetaResultSet createMetaResultSet(int rows) throws SQLException { ColumnInfo[] columns = new ColumnInfo[] { new IntegerColumn("Test", ResultSetMetaData.columnNoNulls, true) }; Object[][] rowData = new Object[rows][1]; for (int i = 0; i < rowData.length; i++) { rowData[i][0] = (i + 1); } return new MetaResultSet(columns, rowData); } /** * Test movement within meta results * * @throws SQLException */ @Test public void meta_result_set_movement_01() throws SQLException { MetaResultSet results = createMetaResultSet(0); Assert.assertTrue(results.isBeforeFirst()); Assert.assertFalse(results.next()); Assert.assertTrue(results.isAfterLast()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test movement within meta results * * @throws SQLException */ @Test public void meta_result_set_movement_02() throws SQLException { MetaResultSet results = createMetaResultSet(1); Assert.assertTrue(results.isBeforeFirst()); // Move forwards Assert.assertTrue(results.next()); Assert.assertTrue(results.isFirst()); Assert.assertFalse(results.isBeforeFirst()); Assert.assertTrue(results.isLast()); Assert.assertFalse(results.isAfterLast()); // Move to end Assert.assertFalse(results.next()); Assert.assertTrue(results.isAfterLast()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test movement within meta results * * @throws SQLException */ @Test public void meta_result_set_movement_03() throws SQLException { MetaResultSet results = createMetaResultSet(1); Assert.assertTrue(results.isBeforeFirst()); // Move forwards Assert.assertTrue(results.next()); Assert.assertTrue(results.isFirst()); Assert.assertFalse(results.isBeforeFirst()); Assert.assertTrue(results.isLast()); Assert.assertFalse(results.isAfterLast()); // Move to end Assert.assertFalse(results.next()); Assert.assertTrue(results.isAfterLast()); // Move backwards Assert.assertTrue(results.previous()); Assert.assertTrue(results.isFirst()); Assert.assertFalse(results.isBeforeFirst()); Assert.assertTrue(results.isLast()); Assert.assertFalse(results.isAfterLast()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test movement within meta results * * @throws SQLException */ @Test public void meta_result_set_movement_04() throws SQLException { MetaResultSet results = createMetaResultSet(1); Assert.assertTrue(results.isBeforeFirst()); // Move to absolute row Assert.assertTrue(results.absolute(1)); Assert.assertTrue(results.isFirst()); Assert.assertFalse(results.isBeforeFirst()); Assert.assertTrue(results.isLast()); Assert.assertFalse(results.isAfterLast()); // Move to end Assert.assertFalse(results.next()); Assert.assertTrue(results.isAfterLast()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_string_01() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new StringColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { "value" } }); Assert.assertTrue(results.next()); String value = results.getString(1); Assert.assertEquals("value", value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_string_02() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new StringColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); String value = results.getString(1); Assert.assertEquals(null, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_boolean_01() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new BooleanColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { true } }); Assert.assertTrue(results.next()); Assert.assertTrue(results.getBoolean(1)); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_boolean_02() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new BooleanColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); Assert.assertFalse(results.getBoolean(1)); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_byte_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new ByteColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { (byte) 0x10 } }); Assert.assertTrue(results.next()); byte value = results.getByte(1); Assert.assertEquals(0x10, value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_byte_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new ByteColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); byte value = results.getByte(1); Assert.assertEquals(0x0, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @SuppressWarnings("deprecation") @Test public void meta_result_set_date_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new DateColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { new Date(2013, 4, 24) } }); Assert.assertTrue(results.next()); Date value = results.getDate(1); Assert.assertEquals(new Date(2013, 4, 24), value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_date_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new DateColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); Date value = results.getDate(1); Assert.assertEquals(null, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_time_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new TimeColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { new Time(0) } }); Assert.assertTrue(results.next()); Time value = results.getTime(1); Assert.assertEquals(new Time(0), value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_time_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new TimeColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); Time value = results.getTime(1); Assert.assertEquals(null, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_decimal_01() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new DecimalColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { new BigDecimal("123.4") } }); Assert.assertTrue(results.next()); BigDecimal value = results.getBigDecimal(1); Assert.assertEquals(new BigDecimal("123.4"), value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_decimal_02() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new DecimalColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); BigDecimal value = results.getBigDecimal(1); Assert.assertEquals(null, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_double_01() throws SQLException { MetaResultSet results = new MetaResultSet( new ColumnInfo[] { new DoubleColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { 0.123d } }); Assert.assertTrue(results.next()); double value = results.getDouble(1); Assert.assertEquals(0.123d, value, 0d); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_double_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new ByteColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); double value = results.getDouble(1); Assert.assertEquals(0d, value, 0d); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_float_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new FloatColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { 0.123f } }); Assert.assertTrue(results.next()); float value = results.getFloat(1); Assert.assertEquals(0.123f, value, 0f); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_float_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new FloatColumn("Test", ResultSetMetaData.columnNullable) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); float value = results.getFloat(1); Assert.assertEquals(0f, value, 0f); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_integer_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new IntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { 1234 } }); Assert.assertTrue(results.next()); int value = results.getInt(1); Assert.assertEquals(1234, value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_integer_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new IntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); int value = results.getInt(1); Assert.assertEquals(0, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_long_integer_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new LongIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { 1234l } }); Assert.assertTrue(results.next()); long value = results.getLong(1); Assert.assertEquals(1234, value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_long_integer_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new LongIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); long value = results.getLong(1); Assert.assertEquals(0, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_short_integer_01() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new ShortIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { (short) 1234 } }); Assert.assertTrue(results.next()); short value = results.getShort(1); Assert.assertEquals((short) 1234, value); Assert.assertFalse(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } /** * Test retrieving meta column values * * @throws SQLException */ @Test public void meta_result_set_short_integer_02() throws SQLException { MetaResultSet results = new MetaResultSet(new ColumnInfo[] { new ShortIntegerColumn("Test", ResultSetMetaData.columnNullable, true) }, new Object[][] { { null } }); Assert.assertTrue(results.next()); short value = results.getShort(1); Assert.assertEquals((short) 0, value); Assert.assertTrue(results.wasNull()); Assert.assertFalse(results.next()); results.close(); Assert.assertTrue(results.isClosed()); } }