<?xml version="1.0"?>
<!--
 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.
-->

<!--
This file is used by the maven-changes-plugin to generate the release notes.
Useful ways of finding items to add to this file are:

1.  Add items when you fix a bug or add a feature (this makes the
release process easy :-).

2.  Do a bugzilla search for tickets closed since the previous release.

3.  Use the report generated by the maven-changelog-plugin to see all
CVS commits.  Set the project.properties' maven.changelog.range
property to the number of days since the last release.

To regenerate the RELEASE-NOTES.txt:

mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=m.n]

The <action> type attribute can be add,update,fix,remove.
-->

<document xmlns="http://maven.apache.org/changes/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-2.0.0.xsd">
  <properties>
    <title>Apache Commons DBUtils Release Notes</title>
  </properties>
  <body>
    <release version="1.9.0" date="YYYY-MM-DD" description="New features and bug fixes.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="sanjanarampurkottur01, Gary Gregory">Switch on String instead of cascading if-else in MockResultSet #220.</action>
      <action type="fix" dev="ggregory" due-to="sanjanarampurkottur01, Gary Gregory">Encapsulate test fields #222.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix BeanProcessor SpotBugs CT: Be wary of letting constructors throw exceptions. (CT_CONSTRUCTOR_THROW).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix StatementConfiguration SpotBugs CT: Be wary of letting constructors throw exceptions. (CT_CONSTRUCTOR_THROW).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.next() does not check if it is already at the end of the result set (SpotBugs CheckResultSet).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Replace BasicRowProcessor use of Locale.ENGLISH with Locale.ROOT.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">AbstractQueryRunner.fillStatementWithBean(PreparedStatement, Object, String...) now throws IllegalArgumentException instead of RuntimeException.</action>
      <action type="fix" dev="ggregory" due-to="strangelookingnerd, Gary Gregory">Migrate tests to JUnit5 #324.</action> 
      <!-- ADD -->
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump Java from 8 to 11.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump commons-parent from 62 to 78 #256, #277, #295, #301, #305, #308, #314.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump org.mockito:mockito-core from 4.11.0 to 5.14.2 #325</action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">Bump org.mockito:mockito-junit-jupiter from 5.14.2 to 5.15.2 #336.</action>
    </release>
    <release version="1.8.1" date="2023-09-09" description="New features and bug fixes.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" issue="DBUTILS-151" due-to="mark, Gary Gregory">
        Module org.apache.commons.dbutils does not declare `uses`.
      </action>
      <!-- ADD -->
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons-parent from 61 to 62.
      </action>
    </release>
    <release version="1.8.0" date="2023-08-01" description="New features and bug fixes.">
      <!-- FIX -->
      <action dev="thecarlhall" type="fix" issue="DBUTILS-131" due-to="yairlenga">
        Speedup query calls without parameters; Use PreparedStatement only when parameters are present.
      </action>
      <action dev="thecarlhall" type="fix">
        Always copy Date, Time, Timestamp on get and set in SqlNullCheckedResultSet.
      </action>
      <action dev="ggregory" type="update" issue="DBUTILS-135" due-to="hdevalke">
        BeanProcessor is not thread safe since [DBUTILS-124].
      </action>
      <action dev="ggregory" type="update" issue="DBUTILS-137" due-to="Gary Gregory">
        Inefficient allocation of Maps in org.apache.commons.dbutils.BasicRowProcessor.toMap(ResultSet).
      </action>
      <action type="fix" dev="ggregory" issue="DBUTILS-138" due-to="Stefano Lissa, Gary Gregory">
        org.apache.commons.dbutils.QueryRunner.query(Connection, boolean, String, ResultSetHandler, Object...) Exception in closing statement leave connections open.
      </action>
      <action type="fix" dev="ggregory" issue="DBUTILS-139" due-to="Gary Gregory">
        Update Java requirement from version 6 to 8.
      </action>
      <action due-to="thecarlhall" type="update">
        clirr, checkstyle, and spotbugs configured as part of default build.
      </action>
      <action dev="ggregory" due-to="Amey Jadiye" type="fix">
        Correction of coverage badge #10.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        Manage JDBC objects using try-with-resources.
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        ResultSet not closed in QueryRunner.insert(Connection, String, ResultSetHandler, Object...).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        ResultSet not closed in QueryRunner.insertBatch(Connection, String, ResultSetHandler, Object[][]).
      </action>
      <action dev="ggregory" due-to="Gary Gregory" type="fix">
        AbstractQueryRunner.fillStatementWithBean(PreparedStatement, Object, String...) now throws IllegalStateException instead of RuntimeException.
      </action>
      <!-- ADD -->
      <action dev="thecarlhall" type="add" issue="PR/9" due-to="rewerma">
        Add @Column annotation to hint the field name instead of dissecting the get method name.
      </action>
      <action dev="ggregory" type="add" issue="DBUTILS-136" due-to="Matthew Hall, Gary Gregory">
        CaseInsensitiveHashMap cannot be accessed by subclasses of BasicRowProcessor; add org.apache.commons.dbutils.BasicRowProcessor.createCaseInsensitiveHashMap(int).
      </action>
      <action dev="ggregory" type="add">
        Add github/codeql-action #115.
      </action>
      <action type="fix" dev="ggregory" due-to="step-security-bot, Gary Gregory">
        [StepSecurity] ci: Harden GitHub Actions #191.
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add StatementConfiguration.StatementConfiguration(Integer, Integer, Integer, Integer, Duration).
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add StatementConfiguration.getQueryTimeoutDuration().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Add StatementConfiguration.Builder.queryTimeout(Duration).
      </action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2 to 3.0.11 #109, #141, #145.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/checkout from 1 to 3.1.10, #44, #23, #48, #75, #93, #143.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/setup-java from 1.4.0 to 3.5.1 #40.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump actions/upload-artifact from 3.1.0 to 3.1.1 #150.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump commons-parent from 50 to 61 #14, #113, #139, #168, #189.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump junit from 4.12 to 5.9.1 vintage #16, #42, #58.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump mockito-core from 3.2.4 to 4.8.1 #18, #21, #46, #53, #97, #103, #111, #116, #122, #131. #137, #151.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump spotbugs-maven-plugin from 3.1.12.2 to 4.4.2, #17, #45, #52.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump spotbugs from 3.1.12.2 to 4.2.3.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump maven-checkstyle-plugin from 3.1.0 to 3.2.0 #56, #132.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump checkstyle from 8.28 to 9.3 #20, #47.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons.japicmp.version from 0.14.3 to 0.16.0.
      </action>
    </release>
    <release version="1.7" date="2017-07-20" description="Bug fixes and separate column &amp; property handlers using SPI">
      <action dev="sebb" type="update" issue="DBUTILS-117" due-to="Vadim Smirnov">
        Error handling possible getParameterMetaData() results
        - allow for null return
        - handle SQLFeatureNotSupportedException
      </action>
      <action dev="britter" type="update" issue="DBUTILS-119" due-to="Michael Akerman">
        Correct errors in BeanMapHandler Javadoc
      </action>
      <action dev="thecarlhall" type="add" issue="DBUTILS-121">
        Add getWriteMethod to BeanProcessor to allow subclasses to influence which write method is used
      </action>
      <action dev="thecarlhall" type="fix" issue="DBUTILS-82" due-to="Kenshi Toriumi">
        Change method contracts to allow extended class types when returning a bean populated from a query
      </action>
      <action dev="thecarlhall" type="fix" issue="DBUTILS-89" due-to="Adam Dyga">
        Add method in BeanProcessor to populate an existing bean
      </action>
      <action dev="thecarlhall" type="fix" issue="DBUTILS-70" due-to="Michael Akerman">
        Add ability to configure statements used in QueryRunner
      </action>
      <action dev="thecarlhall" type="add" issue="DBUTILS-50" due-to="Dan Fabulich">
        Support CallableStatement "out" parameters
      </action>
      <action dev="thecarlhall" type="add" issue="DBUTILS-124">
        Implement column and property handlers using Java's service interfaces.
      </action>
      <action dev="thecarlhall" type="update" issue="PR/1" due-to="Michael Hausegger">
        Created some Unit Tests to increase code coverage.
      </action>
    </release>
    <release version="1.6" date="2014-07-20" description="Bug fixes and addition of insert methods">
      <action dev="britter" type="fix" issue="DBUTILS-110">
        ArrayHandler should return an empty array when handle has no rows
      </action>
      <action dev="britter" type="fix" issue="DBUTILS-114" due-to="Michael Osipov">
        Order of columns not retained in BasicRowProcessor with HashMap
      </action>
      <action dev="britter" type="fix" issue="DBUTILS-118" due-to="Feysal Rujbally, Daniele Cremonini">
        BeanProcessor not returning nanoseconds
      </action>
      <action dev="britter" type="add" issue="DBUTILS-113" due-to="Graylin Kim, Michael Osipov">
        Add support for conversion of ResultSet strings to enums in the BeanProcessor
      </action>
      <action dev="sebb" type="update" issue="DBUTILS-85">
        In BeanProcessor#isCompatibleType, can Integer.class.isInstance(value) be replaced by value instanceof Integer (etc)?
        Simplified code by using instanceof.
      </action>
      <action dev="sebb" due-to="Niall Pemberton" type="fix" issue="DBUTILS-106">
        DBUtils can't build using JDK 1.7 - DriverProxy needs to implement getParentLogger()
        Add dynamic invocation.
      </action>
      <action dev="wspeirs" due-to="Micah Huff" type="add" issue="DBUTILS-108">
        Create functionality to return auto-generated keys in batches of SQL inserts
      </action>
      <action dev="wspeirs" due-to="PB" type="add" issue="DBUTILS-107">
        Patch QueryLoader to also load from XML properties files
      </action>
      <action dev="wspeirs" due-to="xiaofei.xu" type="fix" issue="DBUTILS-100">
        Updated the use of getColumnName to try getColumnLabel first
      </action>
      <action dev="simonetripodi" due-to="Moandji Ezana" type="add" issue="DBUTILS-98">
        Add missing Javadoc to QueryRunner#insert
      </action>
      <action dev="simonetripodi" type="add" issue="DBUTILS-97">
        Add an Abstract ResultSetHandler implementation in order to reduce redundant 'resultSet' variable invocation
      </action>
      <action dev="simonetripodi" due-to="yuyf" type="fix" issue="DBUTILS-96">
        DbUtils#loadDriver(ClassLoader,String) makes DriverManager throwing "No suitable driver found for jdbc"
        if ClassLoader is not the System's one
      </action>
      <action dev="wspeirs" due-to="Moandji Ezana" type="add" issue="DBUTILS-87">
        Added insert methods to QueryRunner and AsyncQueryRunner that return the generated key.
      </action>
    </release>
    <release version="1.5" date="2012-07-20" description="Bug fixes and addition of BeanMapHandler">
      <action dev="simonetripodi" due-to="Benedikt Ritter" type="update" issue="DBUTILS-94">
        Provide test coverage for org.apache.commons.dbutils.DbUtils
      </action>
      <action dev="simonetripodi" due-to="Stevo Slavic" type="fix" issue="DBUTILS-93">
        Source assembly artifact fails to build a site because of missing pmd-ruleset.xml
      </action>
      <action dev="simonetripodi" due-to="Stevo Slavic" type="update" issue="DBUTILS-91">
        Enhance BasicRowProcessor to have row mapping easier to configure
      </action>
      <action due-to="wspeirs" type="update">
        Updated pom.xml: Java 1.6 now required, clirr and compiler plugin removed
      </action>
      <action due-to="Tiago Cavaleiro" dev="wspeirs" type="fix" issue="DBUTILS-84">
        BeanProcessor method processColumn should take SQLXML in consideration
      </action>
      <action dev="wspeirs" type="update" issue="DBUTILS-77">
        Updated documentation to better reflect the use of pmdKnownBroken
      </action>
      <action due-to="Sebb" type="fix" issue="DBUTILS-73">
        Added a fixed Locale (Locale.ENGLISH) to all toLowerCase calls in BasicRowProcessor
      </action>
      <action due-to="Michael Osipov" type="add" issue="DBUTILS-67">
        Added BeanMapHandler
      </action>
      <action due-to="Michael Osipov" type="update" issue="DBUTILS-66">
        Added generics to ScalarHandler, ColumnHandler, and KeyedHandler
      </action>
    </release>
    <release version="1.4" date="2011-10-23" description="Bug fixes and addition of asynchronous QueryLoader">
      <action type="fix" issue="DBUTILS-81">
        DbUtils.loadDriver() uses Class.forName()
      </action>
      <action type="fix" issue="DBUTILS-80">
        DbUtils.loadDriver catches Throwable
      </action>
      <action type="fix" issue="DBUTILS-65">
        Duplicate code introduced during Java 1.5 branch merge
      </action>
      <action type="fix" issue="DBUTILS-79">
        fillStatement doesn't complain when there are too few parameters
      </action>
      <action type="update" issue="DBUTILS-75">
        efficient usage from findbugs
      </action>
      <action dev="wspeirs" type="add" issue="DBUTILS-78">
        Add asynchronous batch, query, and update calls
      </action>
    </release>
    <release version="1.3" date="2009-11-04" description="Adds Java5 generics and varargs">
      <action dev="dfabulich" type="add" issue="DBUTILS-48">
        Java 1.5 generics and varargs
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-57">
        BeanProcessor#mapColumnsToProperties now prefers to use column labels over column names (where aliases are not set, these should be identical)
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-58">
        Setting pmdKnownBroken in QueryRunner constructor now completely ignores ParameterMetaData
      </action>
      <action dev="dfabulich" type="fix" issue="DBUTILS-60">
        Fixed error message in QueryRunner#rethrow
      </action>
    </release>
    <release version="1.2" date="2009-03-06" description="Another round of fixes; deprecates methods in preparation for varargs in java5">
      <action dev="dfabulich" type="update" issue="DBUTILS-52">
        Removed setDataSource method to guarantee thread safety
      </action>
      <action dev="sebb" type="update" issue="DBUTILS-51">
        Made numerous private instance members final to guarantee thread safety; changed protected member of KeyedHandler to final
      </action>
      <action dev="bayard" type="remove">
        Remove old Maven1/Ant build scripts
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-29">
        Support bean property to SQL IN parameter mapping
      </action>
      <action dev="dfabulich" type="fix" issue="DBUTILS-31">
        fillStatement setNull bug with the Postgres/Derby JDBC driver (and others)
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-33">
        Make GenericListHandler (now AbstractListHandler) public
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-34">
        BasicRowProcessor loses any information on database field case
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-37">
        BeanListHandler#handle(ResultSet) is not optimal
      </action>
      <action dev="dfabulich" type="fix" issue="DBUTILS-40">
        NullPointerException occurred at rethrow method
      </action>
      <action dev="dfabulich" type="update" issue="DBUTILS-42">
        Object with Long or Decimal got initial zero value while database field is null
      </action>
      <action dev="dennisl" type="update" issue="DBUTILS-38">
        example documentation page, update query
      </action>
      <action dev="bayard" type="fix" issue="DBUTILS-36">
        Add serialVersionUID to BasicRowProcessor.CaseInsensitiveHashMap
      </action>
    </release>
    <release version="1.1" date="2006-12-01" description="Last couple of years of fixes">
      <action dev="bayard" type="fix" issue="DBUTILS-32">
        Tests fail to build under 1.6, and warning while compiling source
      </action>
      <action dev="bayard" type="fix" issue="DBUTILS-1">
        BeanListHandler and BeanHandler fail to support java.sql.Date()
      </action>
      <action dev="bayard" type="update" issue="DBUTILS-16">
        ResultSetRowProcessor abstract handler and some classes rework
      </action>
      <action dev="bayard" type="fix" issue="DBUTILS-3">
        Setting bean properties fails silently
      </action>
      <action dev="dgraham" type="fix" issue="DBUTILS-9">
        MockResultSet needs to handle equals and hashCode
      </action>
      <action dev="bayard" type="fix" issue="DBUTILS-7">
        MockResultSet: Throw UnsupportedOperationException for not implemented methods
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-20">
        Implement Pluggable Adaptors to Make BeanHandler Smarter
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-15">
        Patch for extending BasicRowProcessor
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-12">
        Protected QueryRunner.close() methods
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-23">
        Updated docs for example.html page (select AS)
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-4">
        Added protected ResultSetIterator.rethrow() method to wrap SQLExceptions in
        RuntimeExceptions.
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-5">
        Added SQLState and error code to rethrown SQLExceptions.
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-25">
        Added KeyedHandler to create a Map of Maps from a ResultSet.
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-2">
        Use current class' ClassLoader instead of QueryLoader's ClassLoader
        in loadQueries().
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-22">
        Made QueryLoader.loadQueries() protected so subclasses can use query
        repositories other than properties files.
      </action>
      <action dev="dgraham" type="update">
        QueryRunner now calls getDataSource() internally any time it needs access
        to its DataSource object to allow subclasses to provide different behavior.
      </action>
      <action dev="dgraham" type="add">
        Added DbUtils.rollbackAndClose() and DbUtils.rollbackAndCloseQuietly().
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-26">
        Call ResultSet.getTimestamp() in BeanProcessor.processColumn() if
        the bean property is a java.sql.Timestamp.  Oracle's getObject()
        implementation returns its own incompatible Timestamp class.
      </action>
      <action dev="dgraham" type="update" issue="DBUTILS-18">
        Changed QueryRunner.fillStatement() null handling
        to use Types.VARCHAR instead of Types.OTHER.  This works for the
        following tested drivers: Firebird 1.5/firebirdsql 1.5RC3,
        Oracle 9/ Thin driver, MySQL 4.0/Msql Connecttor 3.0 and mm.mysql
        2.0.4 MaxDB 7.5, HSQLDB 1.7.1, and MS Access/ODBC Bridge.
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-21">
        Added a protected QueryRunner.prepareConnection() method to
        allow subclasses to customize the Connections retrieved from
        the DataSource before they're used.
      </action>
      <action dev="dgraham" type="add">
        Refactored bean handling from BasicRowProcessor into new
        BeanProcessor class.  This also fixes the common problem with
        Oracle NUMERIC fields not being set into bean properties.
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-13">
        Added QueryRunner.batch() methods for batch updates.
      </action>
      <action dev="dgraham" type="add" issue="DBUTILS-11">
        Added new ResultSetHandler implementation, ColumnListHandler, that
        converts one ResultSet column into a List of Objects.
      </action>
    </release>
    <release version="1.0" date="2003-11-10" description="First release of DbUtils">
      <action type="add">
        This is the first release of the Commons DbUtils package.  DbUtils
        is a small set of classes designed to make working with JDBC easier.
      </action>
      <action type="add">
        QueryRunner class with ResultSetHandler interface allow you to easily query or
        update a database and handle the ResultSet.  Several useful implementations
        of the ResultSetHandler interface are located in the
        org.apache.commons.dbutils.handlers.* package.
      </action>
      <action type="add">
        ResultSet wrappers that decorate ResultSets with specialized
        behavior.  See the classes in the org.apache.commons.dbutils.wrappers.*
        package for details.
      </action>
      <action type="add">
        Dynamic JDBC API interface implementations via the standard
        java.lang.reflect.Proxy class.  This allows you to implement JDBC
        interfaces such as ResultSet at runtime to avoid API version
        incompatibilities.  See org.apache.commons.dbutils.ProxyFactory
        for details.
      </action>
    </release>
  </body>
</document>
