<?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-01-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>
    </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>
