<?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="1.8" date="2020-01-10" description="New features and bug fixes.">
      <action dev="thecarlhall" type="fix" issue="DBUTILS-143">
        Methods in QueryRunner and AsyncQueryRunner only close connections if they create them.
      </action>
      <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>
    </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>
