<?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.">
      <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="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="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="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="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>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update actions/checkout from v1 to v2.3.4, #44, #23, #48.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update commons-parent from 50 to 51 #14.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update junit from 4.12 to 4.13.1 #16, #42.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update mockito-core from 3.2.4 to 3.4.6 #18, #21.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Update spotbugs-maven-plugin from 3.1.12.2 to 4.1.4, #17, #45.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update maven-checkstyle-plugin from 3.1.0 to 3.1.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Update checkstyle from 8.28 to 8.35, #20.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/setup-java from v1.4.0 to v1.4.3 #40.
      </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="Dependabot">
        Bump mockito-core from 3.4.6 to 3.6.0 #46.
      </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>
