<?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/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/plugins/maven-changes-plugin/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Apache Commons DBUtils Release Notes</title>
  </properties>
  <body>

    <release version="2.0" date="2020-MM-DD" 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 dev="ggregory" type="fix" issue="DBUTILS-138" due-to="Stefano Lissa, Gary Gregory">
        org.apache.commons.dbutils.QueryRunner.query(Connection, boolean, String, ResultSetHandler&lt;T>, Object...) Exception in closing statement leave connections open.
      </action>
      <action dev="ggregory" type="fix" issue="DBUTILS-139" due-to="Gary Gregory">
        Update Java requirement from version 6 to 7.
      </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>
      <!-- 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>
      <!--  UPDATE -->
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2 to 3.0.7 #109.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/checkout from 1 to 3, #44, #23, #48, #93, #75.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/setup-java from 1.4.0 to 3 #40.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump commons-parent from 50 to 53 #14, #113.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump junit from 4.12 to 4.13.2 #16, #42, #58.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump mockito-core from 3.2.4 to 4.6.1 #18, #21, #46, #53, #97, #103, #111, #116, #122.
      </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.1.2 #56.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump checkstyle from 8.28 to 8.35, #20.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump checkstyle from 8.35 to 8.37 #47.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump commons.japicmp.version 0.14.3 -> 0.15.2.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump checkstyle from 8.37 to 9.3.
      </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 occured 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>
