Turning on jacaoco cover checks (and getting coverage above 80)

This commit is contained in:
2022-07-15 13:26:44 -05:00
parent ae70c34d4e
commit ef640bdd7d
5 changed files with 506 additions and 199 deletions

View File

@ -24,6 +24,8 @@ commands:
name: Run Maven
command: |
mvn -s .circleci/mvn-settings.xml << parameters.maven_subcommand >>
- store_artifacts:
path: target/site/jacoco/index.html
- run:
name: Save test results
command: |

86
pom.xml
View File

@ -44,6 +44,8 @@
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
<maven.compiler.showWarnings>true</maven.compiler.showWarnings>
<coverage.haltOnFailure>true</coverage.haltOnFailure>
<coverage.instructionCoveredRatioMinimum>0.80</coverage.instructionCoveredRatioMinimum>
</properties>
<dependencies>
@ -51,7 +53,7 @@
<dependency>
<groupId>com.kingsrook.qqq</groupId>
<artifactId>qqq-backend-core</artifactId>
<version>0.2.0-SNAPSHOT</version>
<version>0.2.0-20220714.175901-2</version>
</dependency>
<!-- 3rd party deps specifically for this module -->
@ -116,6 +118,9 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<argLine>@{jaCoCoArgLine}</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@ -165,7 +170,84 @@
<versionDigitToIncrement>1</versionDigitToIncrement> <!-- In general, we update the minor -->
</configuration>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.8</version>
<executions>
<execution>
<id>pre-unit-test</id>
<goals>
<goal>prepare-agent</goal>
</goals>
<configuration>
<propertyName>jaCoCoArgLine</propertyName>
</configuration>
</execution>
<execution>
<id>unit-test-check</id>
<goals>
<goal>check</goal>
</goals>
<configuration>
<!-- Gives us the ability to pass a parameter to not fail due to coverage E.g. -Dcoverage.haltOnFailure=false -->
<haltOnFailure>${coverage.haltOnFailure}</haltOnFailure>
<rules>
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>INSTRUCTION</counter>
<value>COVEREDRATIO</value>
<minimum>${coverage.instructionCoveredRatioMinimum}</minimum>
</limit>
</limits>
</rule>
</rules>
</configuration>
</execution>
<execution>
<id>post-unit-test</id>
<phase>verify</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>exec-maven-plugin</artifactId>
<groupId>org.codehaus.mojo</groupId>
<version>3.0.0</version>
<executions>
<execution>
<id>test-coverage-summary</id>
<phase>verify</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>sh</executable>
<arguments>
<argument>-c</argument>
<argument>
<![CDATA[
echo "Element\nInstructions Missed\nInstruction Coverage\nBranches Missed\nBranch Coverage\nComplexity Missed\nComplexity Hit\nLines Missed\nLines Hit\nMethods Missed\nMethods Hit\nClasses Missed\nClasses Hit\n" > /tmp/$$.headers
xpath -q -e '/html/body/table/tfoot/tr[1]/td/text()' target/site/jacoco/index.html > /tmp/$$.values
echo
echo "Jacoco coverage summary report:"
echo " See also target/site/jacoco/index.html"
echo " and https://www.jacoco.org/jacoco/trunk/doc/counters.html"
echo "------------------------------------------------------------"
paste /tmp/$$.headers /tmp/$$.values | tail +2 | awk -v FS='\t' '{printf("%-20s %s\n",$1,$2)}'
rm /tmp/$$.headers /tmp/$$.values
]]>
</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

View File

@ -640,7 +640,7 @@ public class QueryManager
/*******************************************************************************
*
* index is 1-based!!
*******************************************************************************/
@SuppressWarnings("unchecked")
public static int bindParamObject(PreparedStatement statement, int index, Object value) throws SQLException
@ -1120,15 +1120,12 @@ public class QueryManager
*******************************************************************************/
public static BigDecimal getBigDecimal(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
BigDecimal value = resultSet.getBigDecimal(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1153,15 +1150,12 @@ public class QueryManager
*******************************************************************************/
public static Date getDate(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Date value = resultSet.getDate(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1186,8 +1180,6 @@ public class QueryManager
*******************************************************************************/
public static Calendar getCalendar(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
@ -1196,7 +1188,6 @@ public class QueryManager
Calendar rs = Calendar.getInstance();
rs.setTimeInMillis(value.getTime());
return (rs);
*/
}
@ -1206,8 +1197,6 @@ public class QueryManager
*******************************************************************************/
public static Calendar getCalendar(ResultSet resultSet, int column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
@ -1216,7 +1205,6 @@ public class QueryManager
Calendar rs = Calendar.getInstance();
rs.setTimeInMillis(value.getTime());
return (rs);
*/
}
@ -1227,8 +1215,6 @@ public class QueryManager
@SuppressWarnings("deprecation")
public static LocalDate getLocalDate(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
@ -1237,7 +1223,24 @@ public class QueryManager
LocalDate date = LocalDate.of(value.getYear() + NINETEEN_HUNDRED, value.getMonth() + 1, value.getDate());
return (date);
*/
}
/*******************************************************************************
**
*******************************************************************************/
@SuppressWarnings("deprecation")
public static LocalDate getLocalDate(ResultSet resultSet, int column) throws SQLException
{
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
return (null);
}
LocalDate date = LocalDate.of(value.getYear() + NINETEEN_HUNDRED, value.getMonth() + 1, value.getDate());
return (date);
}
@ -1248,8 +1251,6 @@ public class QueryManager
@SuppressWarnings("deprecation")
public static LocalDateTime getLocalDateTime(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
@ -1258,7 +1259,6 @@ public class QueryManager
LocalDateTime dateTime = LocalDateTime.of(value.getYear() + NINETEEN_HUNDRED, value.getMonth() + 1, value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), 0);
return (dateTime);
*/
}
@ -1287,8 +1287,6 @@ public class QueryManager
@SuppressWarnings("deprecation")
public static OffsetDateTime getOffsetDateTime(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
@ -1297,7 +1295,24 @@ public class QueryManager
OffsetDateTime dateTime = OffsetDateTime.of(value.getYear() + NINETEEN_HUNDRED, value.getMonth() + 1, value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), 0, OffsetDateTime.now().getOffset());
return (dateTime);
*/
}
/*******************************************************************************
**
*******************************************************************************/
@SuppressWarnings("deprecation")
public static OffsetDateTime getOffsetDateTime(ResultSet resultSet, int column) throws SQLException
{
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
return (null);
}
OffsetDateTime dateTime = OffsetDateTime.of(value.getYear() + NINETEEN_HUNDRED, value.getMonth() + 1, value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), 0, OffsetDateTime.now().getOffset());
return (dateTime);
}
@ -1307,15 +1322,12 @@ public class QueryManager
*******************************************************************************/
public static Boolean getBoolean(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Boolean value = resultSet.getBoolean(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1325,15 +1337,12 @@ public class QueryManager
*******************************************************************************/
public static Boolean getBoolean(ResultSet resultSet, int column) throws SQLException
{
throw (new NotImplementedException());
/*
Boolean value = resultSet.getBoolean(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1343,15 +1352,12 @@ public class QueryManager
*******************************************************************************/
public static Long getLong(ResultSet resultSet, int column) throws SQLException
{
throw (new NotImplementedException());
/*
long value = resultSet.getLong(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1361,15 +1367,12 @@ public class QueryManager
*******************************************************************************/
public static Long getLong(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
long value = resultSet.getLong(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1379,15 +1382,12 @@ public class QueryManager
*******************************************************************************/
public static Timestamp getTimestamp(ResultSet resultSet, int column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}
@ -1397,15 +1397,12 @@ public class QueryManager
*******************************************************************************/
public static Timestamp getTimestamp(ResultSet resultSet, String column) throws SQLException
{
throw (new NotImplementedException());
/*
Timestamp value = resultSet.getTimestamp(column);
if(resultSet.wasNull())
{
return (null);
}
return (value);
*/
}

View File

@ -22,7 +22,6 @@
package com.kingsrook.qqq.backend.module.rdbms.jdbc;
import java.math.BigDecimal;
import java.util.HashMap;
@ -31,199 +30,199 @@ import java.util.HashMap;
*******************************************************************************/
public class SimpleEntity extends HashMap<String, Object>
{
private String tableName;
// private String tableName;
/*******************************************************************************
**
*******************************************************************************/
public SimpleEntity()
{
super();
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public SimpleEntity()
// {
// super();
// }
/*******************************************************************************
**
*******************************************************************************/
public SimpleEntity with(String key, Object value)
{
put(key, value);
return (this);
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public SimpleEntity with(String key, Object value)
// {
// put(key, value);
// return (this);
// }
/*******************************************************************************
** Return the current value of tableName
**
** @return tableName
*******************************************************************************/
public String getTableName()
{
return (tableName);
}
// /*******************************************************************************
// ** Return the current value of tableName
// **
// ** @return tableName
// *******************************************************************************/
// public String getTableName()
// {
// return (tableName);
// }
/*******************************************************************************
** Set the current value of tableName
**
** @param tableName
*******************************************************************************/
public void setTableName(String tableName)
{
this.tableName = tableName;
}
// /*******************************************************************************
// ** Set the current value of tableName
// **
// ** @param tableName
// *******************************************************************************/
// public void setTableName(String tableName)
// {
// this.tableName = tableName;
// }
/*******************************************************************************
**
*******************************************************************************/
public SimpleEntity withTableName(String tableName)
{
setTableName(tableName);
return (this);
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public SimpleEntity withTableName(String tableName)
// {
// setTableName(tableName);
// return (this);
// }
/*******************************************************************************
**
*******************************************************************************/
public Boolean getBoolean(String columnName)
{
Object o = get(columnName);
if(o == null)
{
return (null);
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public Boolean getBoolean(String columnName)
// {
// Object o = get(columnName);
// if(o == null)
// {
// return (null);
// }
if(o instanceof Boolean)
{
return ((Boolean) o);
}
else if(o instanceof Number)
{
int i = ((Number) o).intValue();
return (i != 0);
}
else if(o instanceof String)
{
String s = (String) o;
return (s.equalsIgnoreCase("1") || s.equalsIgnoreCase("true") || s.equalsIgnoreCase("t"));
}
else
{
throw new IllegalArgumentException("Could not get value of object of type [" + o.getClass() + "] as Boolean.");
}
// if(o instanceof Boolean)
// {
// return ((Boolean) o);
// }
// else if(o instanceof Number)
// {
// int i = ((Number) o).intValue();
// return (i != 0);
// }
// else if(o instanceof String)
// {
// String s = (String) o;
// return (s.equalsIgnoreCase("1") || s.equalsIgnoreCase("true") || s.equalsIgnoreCase("t"));
// }
// else
// {
// throw new IllegalArgumentException("Could not get value of object of type [" + o.getClass() + "] as Boolean.");
// }
}
// }
/*******************************************************************************
**
*******************************************************************************/
public String getString(String columnName)
{
Object o = get(columnName);
if(o == null)
{
return (null);
}
if(o instanceof String)
{
return ((String) o);
}
else if(o instanceof byte[])
{
return (new String((byte[]) o));
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public String getString(String columnName)
// {
// Object o = get(columnName);
// if(o == null)
// {
// return (null);
// }
// if(o instanceof String)
// {
// return ((String) o);
// }
// else if(o instanceof byte[])
// {
// return (new String((byte[]) o));
// }
return String.valueOf(o);
}
// return String.valueOf(o);
// }
/*******************************************************************************
**
*******************************************************************************/
public Integer getInteger(String columnName)
{
Object o = get(columnName);
if(o instanceof Long)
{
return ((Long) o).intValue();
}
else if(o instanceof Short)
{
return ((Short) o).intValue();
}
else if(o instanceof String)
{
return (Integer.parseInt((String) o));
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public Integer getInteger(String columnName)
// {
// Object o = get(columnName);
// if(o instanceof Long)
// {
// return ((Long) o).intValue();
// }
// else if(o instanceof Short)
// {
// return ((Short) o).intValue();
// }
// else if(o instanceof String)
// {
// return (Integer.parseInt((String) o));
// }
return ((Integer) o);
}
// return ((Integer) o);
// }
/*******************************************************************************
**
*******************************************************************************/
public BigDecimal getBigDecimal(String columnName)
{
Object o = get(columnName);
if(o == null)
{
return (null);
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public BigDecimal getBigDecimal(String columnName)
// {
// Object o = get(columnName);
// if(o == null)
// {
// return (null);
// }
if(o instanceof BigDecimal)
{
return ((BigDecimal) o);
}
else
{
return new BigDecimal(String.valueOf(o));
}
}
// if(o instanceof BigDecimal)
// {
// return ((BigDecimal) o);
// }
// else
// {
// return new BigDecimal(String.valueOf(o));
// }
// }
/*******************************************************************************
**
*******************************************************************************/
public Long getLong(String columnName)
{
Object o = get(columnName);
if(o instanceof Integer)
{
return ((Integer) o).longValue();
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public Long getLong(String columnName)
// {
// Object o = get(columnName);
// if(o instanceof Integer)
// {
// return ((Integer) o).longValue();
// }
return ((Long) o);
}
// return ((Long) o);
// }
/*******************************************************************************
**
*******************************************************************************/
public void trimStrings()
{
for(String key : keySet())
{
Object value = get(key);
if(value != null && value instanceof String)
{
put(key, ((String) value).trim());
}
}
}
// /*******************************************************************************
// **
// *******************************************************************************/
// public void trimStrings()
// {
// for(String key : keySet())
// {
// Object value = get(key);
// if(value != null && value instanceof String)
// {
// put(key, ((String) value).trim());
// }
// }
// }
}

View File

@ -0,0 +1,227 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2022. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.module.rdbms.jdbc;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.util.GregorianCalendar;
import com.kingsrook.qqq.backend.module.rdbms.TestUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
/*******************************************************************************
**
*******************************************************************************/
class QueryManagerTest
{
/*******************************************************************************
**
*******************************************************************************/
@BeforeEach
void beforeEach() throws SQLException
{
Connection connection = getConnection();
QueryManager.executeUpdate(connection, "CREATE TABLE t (i INTEGER, dt DATETIME, c CHAR(1))");
}
/*******************************************************************************
**
*******************************************************************************/
@AfterEach
void afterEach() throws SQLException
{
Connection connection = getConnection();
QueryManager.executeUpdate(connection, "DROP TABLE t");
}
/*******************************************************************************
**
*******************************************************************************/
private Connection getConnection() throws SQLException
{
return new ConnectionManager().getConnection(TestUtils.defineBackend());
}
/*******************************************************************************
** Test the various overloads that bind params
*******************************************************************************/
@Test
void testBindParams() throws SQLException
{
long ctMillis = System.currentTimeMillis();
Connection connection = getConnection();
PreparedStatement ps = connection.prepareStatement("UPDATE t SET i = ? WHERE i > 0");
///////////////////////////////////////////////////////////////////////////////
// these calls - we just want to assert that they don't throw any exceptions //
///////////////////////////////////////////////////////////////////////////////
QueryManager.bindParamObject(ps, 1, (short) 1);
QueryManager.bindParamObject(ps, 1, (long) 1);
QueryManager.bindParamObject(ps, 1, true);
QueryManager.bindParamObject(ps, 1, BigDecimal.ONE);
QueryManager.bindParamObject(ps, 1, "hello".getBytes(StandardCharsets.UTF_8));
QueryManager.bindParamObject(ps, 1, new Timestamp(ctMillis));
QueryManager.bindParamObject(ps, 1, new Date(ctMillis));
QueryManager.bindParamObject(ps, 1, new GregorianCalendar());
QueryManager.bindParamObject(ps, 1, LocalDate.now());
QueryManager.bindParamObject(ps, 1, OffsetDateTime.now());
QueryManager.bindParamObject(ps, 1, LocalDateTime.now());
assertThrows(SQLException.class, () ->
{
QueryManager.bindParamObject(ps, 1, new Object());
});
QueryManager.bindParam(ps, 1, (Integer) null);
QueryManager.bindParam(ps, 1, (Boolean) null);
QueryManager.bindParam(ps, 1, (BigDecimal) null);
QueryManager.bindParam(ps, 1, (byte[]) null);
QueryManager.bindParam(ps, 1, (Timestamp) null);
QueryManager.bindParam(ps, 1, (String) null);
QueryManager.bindParam(ps, 1, (Date) null);
QueryManager.bindParam(ps, 1, (GregorianCalendar) null);
QueryManager.bindParam(ps, 1, (LocalDate) null);
QueryManager.bindParam(ps, 1, (LocalDateTime) null);
QueryManager.bindParam(ps, 1, 1);
QueryManager.bindParam(ps, 1, true);
QueryManager.bindParam(ps, 1, BigDecimal.ONE);
QueryManager.bindParam(ps, 1, "hello".getBytes(StandardCharsets.UTF_8));
QueryManager.bindParam(ps, 1, new Timestamp(ctMillis));
QueryManager.bindParam(ps, 1, "hello");
QueryManager.bindParam(ps, 1, new Date(ctMillis));
QueryManager.bindParam(ps, 1, new GregorianCalendar());
QueryManager.bindParam(ps, 1, LocalDate.now());
QueryManager.bindParam(ps, 1, LocalDateTime.now());
}
/*******************************************************************************
** Test the various getXXX methods from result sets
*******************************************************************************/
@Test
void testGetValueMethods() throws SQLException
{
Connection connection = getConnection();
QueryManager.executeUpdate(connection, "INSERT INTO t (i, dt, c) VALUES (1, now(), 'A')");
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from t");
preparedStatement.execute();
ResultSet rs = preparedStatement.getResultSet();
rs.next();
assertEquals(1, QueryManager.getInteger(rs, "i"));
assertEquals(1, QueryManager.getInteger(rs, 1));
assertEquals(1L, QueryManager.getLong(rs, "i"));
assertEquals(1L, QueryManager.getLong(rs, 1));
assertArrayEquals(new byte[] { 0, 0, 0, 1 }, QueryManager.getByteArray(rs, "i"));
assertArrayEquals(new byte[] { 0, 0, 0, 1 }, QueryManager.getByteArray(rs, 1));
assertEquals(1, QueryManager.getObject(rs, "i"));
assertEquals(1, QueryManager.getObject(rs, 1));
assertEquals(BigDecimal.ONE, QueryManager.getBigDecimal(rs, "i"));
assertEquals(BigDecimal.ONE, QueryManager.getBigDecimal(rs, 1));
assertEquals(true, QueryManager.getBoolean(rs, "i"));
assertEquals(true, QueryManager.getBoolean(rs, 1));
assertNotNull(QueryManager.getDate(rs, "dt"));
assertNotNull(QueryManager.getDate(rs, 2));
assertNotNull(QueryManager.getCalendar(rs, "dt"));
assertNotNull(QueryManager.getCalendar(rs, 2));
assertNotNull(QueryManager.getLocalDate(rs, "dt"));
assertNotNull(QueryManager.getLocalDate(rs, 2));
assertNotNull(QueryManager.getLocalDateTime(rs, "dt"));
assertNotNull(QueryManager.getLocalDateTime(rs, 2));
assertNotNull(QueryManager.getOffsetDateTime(rs, "dt"));
assertNotNull(QueryManager.getOffsetDateTime(rs, 2));
assertNotNull(QueryManager.getTimestamp(rs, "dt"));
assertNotNull(QueryManager.getTimestamp(rs, 2));
assertEquals("A", QueryManager.getObject(rs, "c"));
assertEquals("A", QueryManager.getObject(rs, 3));
}
/*******************************************************************************
** Test the various getXXX methods from result sets, when they return null
*******************************************************************************/
@Test
void testGetValueMethodsReturningNull() throws SQLException
{
Connection connection = getConnection();
QueryManager.executeUpdate(connection, "INSERT INTO t (i, dt, c) VALUES (null, null, null)");
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * from t");
preparedStatement.execute();
ResultSet rs = preparedStatement.getResultSet();
rs.next();
assertNull(QueryManager.getInteger(rs, "i"));
assertNull(QueryManager.getInteger(rs, 1));
assertNull(QueryManager.getLong(rs, "i"));
assertNull(QueryManager.getLong(rs, 1));
assertNull(QueryManager.getByteArray(rs, "i"));
assertNull(QueryManager.getByteArray(rs, 1));
assertNull(QueryManager.getObject(rs, "i"));
assertNull(QueryManager.getObject(rs, 1));
assertNull(QueryManager.getBigDecimal(rs, "i"));
assertNull(QueryManager.getBigDecimal(rs, 1));
assertNull(QueryManager.getBoolean(rs, "i"));
assertNull(QueryManager.getBoolean(rs, 1));
assertNull(QueryManager.getDate(rs, "dt"));
assertNull(QueryManager.getDate(rs, 2));
assertNull(QueryManager.getCalendar(rs, "dt"));
assertNull(QueryManager.getCalendar(rs, 2));
assertNull(QueryManager.getLocalDate(rs, "dt"));
assertNull(QueryManager.getLocalDate(rs, 2));
assertNull(QueryManager.getLocalDateTime(rs, "dt"));
assertNull(QueryManager.getLocalDateTime(rs, 2));
assertNull(QueryManager.getOffsetDateTime(rs, "dt"));
assertNull(QueryManager.getOffsetDateTime(rs, 2));
assertNull(QueryManager.getTimestamp(rs, "dt"));
assertNull(QueryManager.getTimestamp(rs, 2));
assertNull(QueryManager.getObject(rs, "c"));
assertNull(QueryManager.getObject(rs, 3));
}
}