#1006 - Add Factory.value(...) as a synonym for Factory.val(...)
for increased Scala / Groovy compatibility
Bug fixes
---------
#973 - EnumType renders name() instead of getLiteral() in
formatXXX() methods
#977 - EnumType renders name() instead of getLiteral() in
Convert.convert() method
#979 - Record.from() sets all changed flags to true. That's not
necessarily correct in the event of storing the record
back to the DB
#985 - AbstractRecord.equals() does not correctly compare
arrays. Compare them using Arrays.asList()
#986 - Postgres / DB2 / Sybase ASE foreign-key namespace is
unique-per-table. jOOQ forces all foreign keys from all
tables into the same namespace
#990 - Problems when encoding arbitrary byte[] as String(byte[])
in inlined SQL. This can cause issues when DEBUG-level
logging is activated
#995 - Routines don't respect SchemaMapping - Github issue #8
#1002 - TableRecord.storeUsing() doesn't update IDENTITY column
values, if the column is not part of the main unique key
#1003 - Sybase / SQL Server / MySQL / Ingres / H2 / Derby's
INSERT .. RETURNING simulation returns null if a table
has an IDENTITY column, but no primary/unique key
#1005 - The INSERT INTO .. VALUES .. syntax may cause type-safety
issues in some databases. VALUES should be converted
before binding
Test cases
----------
#984 - Detach IDENTITY column tests from UNIQUE KEY tests,
create a dedicated test suite instead
Version 2.0.0 - November 25, 2011
=================================================================
This release is a fresh start in many areas of jOOQ, adressing
issues that have been requested by users for a long time. These
release notes docment the most important changes, a detailed
upgrade guide, as well as the detailed list of improvements.
Most important changes
----------------------
- The API became more static. This applies to many Factory
methods, such as val(), literal(), as well as to many Field
methods that have been moved over to the Factory. For example,
when before, you wrote this using "postfix function notation":
NAME.replace(" ", "_").trim()
you will now write (just as in SQL):
trim(replace(NAME, " ", "_"))
Using static imports of Factory.*, jOOQ makes SQL look even
more like SQL. The current "postfix notation" is maintained for
backwards compatibility.
- By default, jooq-codegen will now generate a "dynamic" meta
model as opposed to the existing static one. Generated tables
covariantly override the as(String) aliasing method, leading
to a much more convenient aliasing style. When before, you
wrote:
Table parent = T.as("parent");
Table child = T.as("child");
Condition join =
parent.getField("ID").equal(child.getField("PARENT_ID"))
You can now write:
T parent = T.as("parent");
T child = T.as("child");
Condition join = parent.ID.equal(child.PARENT_ID)
Of course, the existing notation still works
- Exceptions are no longer checked. When previously, the DB's
SQLException was propagated to client code, there is now an
unchecked DataAccessException hierarchy, similar to that of
Spring. This will eventually give way to a standardised error
handling abstraction, in future developments.
- Window functions are now constructed from their underlying
aggregate functions just like in SQL. For example:
sum(AMOUNT)
sum(AMOUNT).over().partitionBy(ACCOUNT)
This makes for a more concise API, especially when considering
future extensions, such as Oracle's KEEP (DENSE_RANK FIRST...)
syntax.
- More type safety has been introduced regarding various places
where generic and types are involved.
This is especially true for INSERT / UPDATE / DELETE statements
- Sequences now also have a type
- Unsigned number types are now supported in those databases that
use them. Unsigned numbers are implemented in jOOU, a spin-off
open source project. For convenience, this library is
"internalised" into jOOQ, to avoid adding a dependency
http://code.google.com/p/joou/
Upgrade instructions:
---------------------
Various of the above changes are incompatible with jOOQ 1.x. In
order to upgrade, please be aware of the following pitfalls:
- The schema needs to be re-generated.
- Much of the post-fix function notation is replaced by static
methods in the Factory. Today's org.jooq.Field API is
maintained in jOOQ 2.0, for backwards compatibility. It will
be removed, eventually, though. Expect some incompatible
changes, where window functions are involved
- Some Factory instance methods (such as val(), literal()) are
now static. They are compatible, but may cause compiler
warnings.
- The meta model is now an instance model by default. If you
prefer the static meta model, you can configure this in your
jooq-codegen configuration.
- The additional typesafety involving and types may cause
compiler warnings and errors.
- SQLException is no longer part of the API. This can cause
compiler issues, in particular when extending jOOQ
- Some utility classes have moved to org.jooq.tools
Should these incompatibilities be too significant for your
project, you can still stay on the 1.x branch, which will be
maintained for a while. Be aware that upgrading might be more
difficult, later, though.
Features and improvements
-------------------------
#55 - Implement improved exception handling
#117 - Improve DSL support for field and table aliasing (decrease
verbosity)
#519 - Add support for MySQL UNSIGNED numeric types
#626 - Create static function access
#661 - Add support for bitwise operators
#718 - Sequences should be mapped to appropriate type (e.g.
SMALLINT, INT, BIGINT, etc)
#734 - Add support for Oracle / SQL Server CUBE() and ROLLUP()
grouping functions
#751 - Add support for Oracle / SQL Server GROUPING SETS()
function
#799 - Add support for Oracle PL/SQL's object-oriented MEMBER
PROCEDURES and MEMBER FUNCTIONS
#804 - Add to Insert, Update, Delete
#835 - Review API typesafety for InsertSetMoreStep
set(Field, T) and similar methods
#890 - Add Factory.selectCount() convenience method
#891 - Let min() max(), etc functions return a new type
AggregateFunction. This type can then be used as an entry-
point for window functions
#892 - Add support for Oracle / SQL Server GROUPING() and
GROUPING_ID() functions to be used along with CUBE() and
ROLLUP()
#893 - Simulate ROLLUP() function for MySQL, using the WITH
ROLLUP grouping modifier
#894 - Move functions from Field> to org.jooq.impl.Factory
and make them static
#895 - Add power(..., Field extends Number>)
#897 - Add (experimental) Spring integration project
#898 - Replace usage of checked SQLException by an unchecked
DataAccessException, similar to that of Spring
#899 - Build jOOQ .jar files as bundles to be deployed into OSGI
environments
#900 - Purge deprecated API - Prior to 2.0
#901 - Introduce InvalidResultException as a subtype of
DataAccessException for integrity checks in methods like
ResultQuery#fetchOne(), ResultQuery#fetchMap(), etc.
#902 - Make AggregateFunction the base type for constructing
window functions
#904 - Move SQLDialectNotSupportedException into
org.jooq.exception package
#905 - Introduce MappingException as a subtype of
DataAccessException for integrity checks in methods like
ResultQuery#fetchInto(), etc.
#907 - Add missing Field.like(Field), notLike(Field)
methods to overload the existing Field.like(T), notLike(T)
#908 - Change rpad / lpad functions to accept String instead of
char
#912 - Add R newRecord(Table, Object) as
the inverse of various into(Class>) methods
#916 - Add > {Record.into(Table) |
Result.into(Table) | ResultQuery.fetchInto(Table) |
Cursor.fetchInto(Table)}
#917 - Add various Cursor.fetchOneInto() convenience methods
#918 - Add CustomTable, CustomRecord as base classes for more
convenience when used with various into(Table) methods
#919 - Allow for accessing non-public constructors of Record
subtypes
#923 - Move some utilities to org.jooq.tools
#924 - Generate a reference to every table in a new Tables.java
class for improved static access
#928 - Add DataTypeException extending DataAccessException in
case something went wrong when converting data types
#930 - Support converting date time types to java.util.Calendar.
This applies to various into(Class>) methods, as well as
Result.getValue(xx, Class>)
#931 - Allow for conversion between Long and date/time types, and
vice versa
#932 - Let the bound of R in TableRecord extend TableRecord,
in UpdatableRecord to extend UpdatableRecord
#933 - Add support for type Character in Record.into(Class>)
methods and similar
#936 - Accept primitive types, such as int.class for type
conversion
#938 - CODEGEN: Add static/instance table field configuration
#939 - Include license.txt and readme.txt in .jar files' META-INF
directory
#953 - Make DefaultGeneratorStrategy methods non-final to allow
for overriding
#954 - Add examples for source code generation of multiple
schemata with Maven
#955 - Generate a reference to every type in a new UDTs.java
class
#957 - Add R Factory.newRecord(UDT) for constructing
attached UDTRecords
#958 - CODEGEN: Add generation-time schema mapping, allowing for
re-writing schemata in jooq-codegen
#960 - CODEGEN: Add code generation configuration parameter to
avoid using the new UByte, UShort, UInteger, ULong wrappers
for UNSIGNED number types
#961 - Use Oracle's SYS.ALL_SEQUENCES.MAX_VALUE to determine the
type of a sequence.
#969 - Add List ResultQuery.fetch(Field>,
Class extends T>) convenience method
Bug fixes
---------
#686 - Reduce the internal API leak by preventing access to
TableFieldImpl, UDTFieldImpl, ParameterImpl
#903 - lag(Field, int, T) erroneously delegates to lead()
#906 - Add more NullPointerException safety to API
#913 - NoClassDefFoundError in JooqUtil.isJPAAvailable()
#920 - Generic type is lost in Cursor.fetchInto(RecordHandler)
#925 - SelectConditionStep should extend SelectConnectByStep, not
SelectGroupByStep
#926 - AbstractRecord.into() fails to convert java.sql.Date into
java.util.Date
#934 - Don't consider static members in reflection utilities when
used with Record.into(Class>) and similar methods
#935 - Don't consider final member fields in reflection utilities
when used with Record.into(Class>) and similar methods
#937 - In the event of name clash (same name for table and field)
generated code has errors
#945 - Calling UpdatableRecord.setValue() twice with the same
argument causes the changed flag to be reset to false
#948 - Always set the changed flag to true in Record.setValue()
#959 - Compilation errors in generated source code if MySQL enum
values match Java reserved words, such as 'true', 'false',
'new', etc...
#962 - Postgres ordering of generated enum literals is unstable
#967 - Better document type conversion
Version 1.7.0 - November 25, 2011
=================================================================
This is a maintenance release for the 1.x branch. Some important
bug fixes are merged from version 2.0. These include:
Bug fixes
---------
#925 - SelectConditionStep should extend SelectConnectByStep, not
SelectGroupByStep
#926 - AbstractRecord.into() fails to convert java.sql.Date into
java.util.Date
#937 - In the event of name clash (same name for table and field)
generated code has errors
#945 - Calling UpdatableRecord.setValue() twice with the same
argument causes the changed flag to be reset to false
#948 - Always set the changed flag to true in Record.setValue()
#951 - Empty Password for jooq-codegen-maven causes NPE
Version 1.6.9 - November 7, 2011
=================================================================
This is a maintenance release for the 1.x branch. Developments
on this branch will stop after version 1.6.9. Only important bug
fixes are merged to this branch. Developments for release 2.0
have started.
The most important functionality in release 1.6.9 is the newly
added support for JDBC batch operations. You can now batch
execute several queries.
See the official blog for more information:
https://blog.jooq.org/jdbc-batch-operations-with-jooq/
Features and improvements
-------------------------
#621 - Add support for JDBC batch operations
#794 - Add support for ORDER BY [int value] in order to reference
a column index for sorting
#882 - Optimise Field.isTrue() and isFalse(). Take Field's data
type into consideration.
#885 - Add support for INSERT INTO .. VALUES (..) syntax,
omitting explicit field declarations
#887 - Add List Cursor.fetchInto(Class)
Bug fixes
---------
#748 - H2 regression in 1.3.158 regarding stored functions, which
return a ResultSet (this was fixed in H2)
#859 - Derby casting of numeric types to BOOLEAN doesn't work
#886 - Regression in date extract function when used in a
subselect
#888 - Derby casting of VARCHAR to FLOAT (and similar) doesn't
work
Version 1.6.8 - October 22, 2011
=================================================================
The main improvement of this release is the re-design of the
stored procedure / function API. With 12 supported RDBMS, which
all have their own idea about what is a stored procedure and what
is a stored function, it has proven to be a better design, to
unite them in one single type: org.jooq.Routine. A routine can
have a return value as well as OUT parameters. It can be embedded
in SQL and used as a field or a table.
This means, you will need to re-generate your database schema,
when upgrading to jOOQ 1.6.8. After re-generation, you'll need to
fix your client code. These are the package changes:
- [generated.package].procedures > [generated.package].routines
- [generated.package].functions > [generated.package].routines
- [generated.package].Procedures > [generated.package].Routines
- [generated.package].Functions > [generated.package].Routines
Oracle generated packages are not re-located. With these
improvements, using stored procedures and functions becomes even
more reliable, especially when cursor types are involved. Read
more about the rationale behind this change:
https://blog.jooq.org/what-are-procedures-and-functions-after-all/
Apart from that, important improvements have been made in the
area of plain SQL tables. Also, consider a demo integration of
jOOQ with Google Cloud SQL:
https://blog.jooq.org/jooq-and-google-cloud-sql-example/
Features and improvements
-------------------------
#271 - Don't pre-fetch table meta data when selecting from plain
SQL tables
#489 - Add support for SELECT * (i.e. render SELECT * where
applicable)
#596 - Add support for VARIANCE() and STDDEV() OVER() window
functions
#608 - Add jOOQ version number in generated source code
#670 - Add more Javadoc to Field.xxx() functions
#692 - Add support for ResultSet type returned from HSQLDB
stored functions
#850 - Use https://www.jooq.org as URL for the @Generated
annotation
#854 - Add convenience methods Fields.isTrue(), isFalse() for
conversion of "Y", "YES", "1", "true", "on", etc into a
boolean condition
#870 - Add support for MEDIAN aggregate function
#872 - Add support for STDDEV_POP(), STDDEV_SAMP(), VAR_POP(),
VAR_SAMP() aggregate functions
#874 - Reduce the number of internal classes for dialect-specific
function aliases
#878 - Implement DataType.equals() and hashCode()
API changes (backwards-compatible)
----------------------------------
#851 - Change Field.{sortAsc|sortDesc}(List sortList) into
Field.{sortAsc|sortDesc}(Collection sortList)
API changes (backwards-incompatible)
------------------------------------
#848 - Purge deprecated API - Prior to 1.6.1
#849 - Replace Cursor.fetchResult() by Cursor.fetch()
#852 - Review stored procedures / functions concept. Merge them
all into a single "Routine" type
Bug fixes
---------
#756 - Error when aliasing HSQLDB and Postgres unnested tables
#761 - Exception when TRACE logging execution with plain SQL
tables involved
#773 - Execute standalone stored functions as CallableStatement
to prevent issues with transactions
#847 - Query.getSQL() doesn't render dialect-specific SQL when
Query is constructed using the fluent API
#853 - DB2 generated convenience methods for stored functions
have unstable ordering
#857 - Derby casting of numeric types to String / VARCHAR does
not work
#858 - SQLDataType.getSQLDataType() should return itself, instead
of null
#860 - SQLite CEIL function is incorrectly simulated. CEIL(2.0)
returns 3.0 instead of 2.0
#861 - Field.replace(String) generates bad SQL for various RDBMS.
Field.replace(String, String) works, though
#863 - Ingres integration generates illegal SQL when selecting
things like SELECT 1 WHERE 1 = 1
#866 - Sybase ASE Field.replace(String) function incorrectly
removes the argument string
#873 - Error when selecting two times the same aggregate field
#877 - Compilation error in generated source code when a table
without a primary key has an identity column
#879 - Add Google Cloud SQL Example
#880 - Query.getSQL() does not consider SchemaMapping
Test cases
----------
#811 - Loader integration tests fail for SQLite
#812 - CSV Loader test leaves Postgres JDBC connection in an
inconsistent transactional state on error
#856 - Add integration tests for Field.abs()
#865 - Add integration tests for Field.ascii()
#867 - Add integration tests for Field.sum(), avg(), max(), min()
#881 - Re-design H2 stored functions to be pre-compiled, in order
to speed up integration tests
Version 1.6.7 - September 25, 2011
=================================================================
This release coincides with the launch of the new website at
https://www.jooq.org. Hence, it ships with little additions to the
deliverable itself.
Apart from new convenience methods, the main addition is a Maven
plugin for jooq-codegen contributed by Sander Plas.
Features and improvements
-------------------------
#797 - Create Maven plugin for source code generation
#825 - Add List> Factory.fetchMany(String) to
allow for fetching several result sets from stored
procedures, such as Sybase ASE's "sp_help"
#838 - Implement MetaDataFieldProvider.toString()
#841 - Add List Result.getValues(Field>, Class)
#842 - Add Query.getBindValues() method to allow for extracting
bind values in the correct order
#843 - Add Factory.fetch(ResultSet) to transform a JDBC ResultSet
into a jOOQ Result
API changes (backwards-compatible)
----------------------------------
#837 - Avoid final keyword on Object methods, such as .equals(),
.hashCode(), etc
Bug fixes
---------
#836 - Bad syntax when selecting from aliased plain SQL tables
#839 - Boolean conversion in getValueAsBoolean() should trim
String values first
#840 - Numeric conversions in getValueAsXXX() should trim String
values first
#844 - NullPointerException when selecting a column from a Result,
that does not exist
Version 1.6.6 - September 11, 2011
=================================================================
Finally, support for another RDBMS has been added. Sybase's other
important product Sybase Adaptive Server Enterprise (or simply
Sybase ASE) is now officially supported by jOOQ
Apart from this, there had been important improvements with the
recently added INSERT .. RETURNING clause, as well as some fixes
related to DECIMAL / NUMERIC data types
Features and improvements
-------------------------
#796 - Complete missing public org.jooq.impl Javadoc
#800 - Add support for Sybase Adaptive Server Enterprise
#808 - Add support for INSERT .. RETURNING for Ingres
#809 - Add support for INSERT .. RETURNING for Sybase SQL
Anywhere using SELECT @@identity
#810 - Add support for INSERT .. RETURNING for SQLite using
last_inserted_rowid()
#813 - Add DSL support for INSERT .. RETURNING
#814 - Change TableRecord to reload its trigger-initialised main
key in Oracle and other RDBMS that don't support IDENTITY
columns
#818 - Add SQLiteFactory.rowid()
#819 - Support SQLite AUTOINCREMENT columns as IDENTITY
#820 - Add Factory.fetchOne(String) for executing plain SQL
queries that return single records
#826 - Allow for returning several records in the INSERT ..
RETURNING clause. This now works for DB2, HSQLDB, MySQL,
and Postgres
#827 - Support Sybase SQL Anywhere's TOP n START AT m clause
instead of simulating it with nested SELECT's
API changes (previous API now deprecated)
-----------------------------------------
#817 - Deprecate Factory.lastID(Identity)
Bug fixes
---------
#815 - SQL Server fetching of IDENTITY value is broken
#821 - Optimise ResultQuery.fetchAny() executing fetchLazy()
internally, and only fetching one record from the cursor
#822 - Let Constant cast to more precise NUMERIC/DECIMAL types
in those RDBMS where casting is necessary
#823 - Cannot bind SQLite BigDecimal, BigInteger types - bind
them as String instead
#824 - BigInteger values cannot be bound in DB2, Derby
#828 - Document inefficient implementation for GREATEST and LEAST
in some RDBMS
Version 1.6.5 - August 28, 2011
=================================================================
This release finally adds a loader for CSV data to jOOQ. You can
now load CSV data using a simple fluent API, configuring error
handling, duplicate behaviour and transaction handling, as well
as various CSV parameters.
This release also changes the way generated keys are retrieved
after INSERT's. Instead of (potentially inconsistently) running
SELECT MAX(pk) immediately after the INSERT, Postgres' INSERT..
RETURNING clause is used (or simulated), in a single statement.
Features and improvements
-------------------------
#784 - Add Result.exportXML() to retrieve a DOM document similar
to that of .formatXML()
#792 - Add support for loading of CSV data into tables
#795 - Add List fetch(int, Class) and
fetch(String, Class) convenience methods
#803 - Add support for INSERT .. RETURNING or simulate it where
not available
#805 - Add T[] fetchArray(int, Class) and
fetchArray(String, Class) convenience methods
#806 - Add T fetchOne(int, Class) and
fetchOne(String, Class) convenience methods
Bug fixes
---------
#798 - Oracle IN (...) clause with more than 1000 arguments does
not work
#802 - Use "INSERT .. RETURNING" instead of "SELECT MAX(pk)"
to retrieve the primary key of a new record
Version 1.6.4 - August 07, 2011
=================================================================
This release ships with a couple of useful concepts inspired by
other frameworks. These are:
- selecting into custom POJO's. Results can be mapped to POJO's
by convention or using JPA @Column annotations
- selecting into custom callbacks. This is already a wide-spread
practice in Spring JdbcTemplates.
- selecting long-running queries asynchronously. This idea has
been inspired by the Avaje Ebean framework
Apart from these changes and some bugfixes, the internal API has
been completely re-designed. The idea here is that query
rendering and variable binding are even faster (less String
objects), more extensible and more accurate. This is a pre-
requisite for many future developments with even more complex SQL
statements, such as for instance CTE's (Common Table Expressions)
Features and improvements
-------------------------
#137 - Add support for asynchronous query execution using
FutureResult ResultQuery.fetchLater() similar to
Avaje Ebean
#198 - Add SELECT INTO functionality into POJO's using
T ResultQuery.fetchInto(Class) similar to JPA
CriteriaQuery
#728 - Add .fetchInto(RecordHandler) to ResultQuery, Result,
and Cursor to allow for callbacks similar to Spring's
JdbcTemplate/Ollin Framework
#774 - Add more TRACE logging to .fetchLazy()
#777 - CURSOR: Add function alias: UNNEST for TABLE
#781 - Add E function (Euler number)
#782 - Add T Record.getValue(..., Class extends T>) methods
for convenient type conversion
#785 - Allow for storing TableRecord with a provided Field>[]
indicating the primary key
#786 - Document thread-safety facts in Factory Javadoc
#788 - Add Key.getFieldsArray() convenience method
#793 - Add support for Oracle's SYS_CONNECT_BY_PATH function
API changes (backwards-incompatible)
------------------------------------
#758 - Change internal QueryPart rendering and binding API to use
Configuration and Context as callback parameters. If you
use CustomField or CustomCondition, please correct your
implementations accordingly. Other parts of the API should
not be affected
#778 - Purge deprecated API, deprecation prior to jOOQ 1.5.7
#790 - Purge deprecated generated code, deprecation prior to
jOOQ 1.5.7
API changes (previous API now deprecated)
-----------------------------------------
#776 - Deprecate QueryPart.getSQL(), add Query.getSQL()
#789 - Deprecate Record constructors with Configuration
parameter
Test cases
----------
#636 - Add integration tests for more advanced CONNECT BY
example
#772 - Add integration tests for selecting cartesian products
(several tables in FROM clause)
Bug fixes
---------
#730 - Sybase cannot bind null values in plain SQL
#759 - Omit the TOP 100 PERCENT clause in SQL Server ordered
top-level queries
#767 - An empty Java package is generated for PL/SQL packages
containing underscores
#771 - Some exotic literals are not properly escaped with quotes
yet, e.g. UDT identifiers, VARRAY types, etc.
#775 - Automatic re-attaching after deserialisation does not work
when used with .fetchLazy()
#787 - The UpdatableRecord's internal changed flags are not
updated after INSERTs / UPDATEs
Version 1.6.3 - July 31, 2011
=================================================================
This is mainly a maintenance release with lots of bugfixes,
mostly around code generation, plain SQL tables, and data types.
Please note that generated source code may contain incompatible
changes due to #639 (see below for details)!
Apart from that, project CURSOR is advancing and it is now
possible to unnest arrays into tables. See this article for
details about where jOOQ is heading with project CURSOR:
https://blog.jooq.org/the-power-of-ref-cursor-types/
Features and improvements
-------------------------
#679 - Improve H2 NVL2 support as of H2 1.3.156
#680 - Improve H2 ROUND support as of H2 1.3.156
#735 - Add README documentation to GitHub
#736 - Add more info regarding number of generated artefacts in
jooq-codegen logging
#750 - Add DataType.isNumeric(), .isString(), .isTemporal(),
.isBinary()
#754 - Log query as executed by JDBC PreparedStatement when
TRACE logging (without inlining variables)
#752 - CURSOR: Add support for selecting from ARRAY types
#762 - Use H2's native support of NVL, instead of COALESCE
#764 - CURSOR: Add support for selecting from ARRAY types
returned from stored functions
API changes (backwards-incompatible)
------------------------------------
#639 - Map DECIMAL(n, 0) and NUMBER/NUMERIC(n, 0) data types
to Byte/Short/Integer/Long/BigInteger instead of
BigDecimal in generated source code. Re-generated code
will not be compatible!
API changes (previous API now deprecated)
-----------------------------------------
#731 - Inconsistent API with Field.lessOrEqualToXXX(). Removed
"To" from method name
#757 - Deprecate Factory.constant() methods
Test cases
----------
#731 - Add missing integration tests for equalAll(), equalSome()
and similar methods
#747 - Upgrade H2 to 1.3.158
Bug fixes
---------
#632 - Sybase error : column @p0 not found in nested SELECT
#700 - Restore HSQLDB ARRAY support with INFORMATION_SCHEMA
change in HSQLDB 2.2.3, and some fixes in 2.2.5
#725 - Cannot insert byte[] data with plain SQL
#733 - H2 changed JDBC type for ResultSet/CURSOR from 0 to -10,
like Oracle
#737 - Compilation errors in generated source code if table
fields contain spaces
#738 - Compilation errors in generated source code if MySQL
procedure parameter type contains two comma-separated
arguments (like DECIMAL(10,2))
#739 - Postgres navigator methods and keys are not re-generated
in the same order
#740 - Formatting is broken on Result.format() with some special
newline characters
#743 - Make SQL Server INFORMATION_SCHEMA independent from
HSQLDB again, to prevent incompatibility issues
#744 - Ingres REAL and FLOAT4 types are generated as FLOAT/FLOAT8
which maps to java.lang.Double, instead of java.lang.Float
#753 - Postgres error when binding array that contains null
values
#755 - NullPointerException when converting an array containing
a null value
#766 - Bad decoding of JDBC Types BIGINT (to BigInteger instead
of Long) and REAL (to BigDecimal instead of Float) when
plain SQL tables are involved
Version 1.6.2 - July 10, 2011
=================================================================
This release mainly introduces three new projects.
Project CURSOR where jOOQ finally supports various RDBMS's TABLE,
CURSOR, and REF CURSOR data types. This is especially useful when
those types are returned from stored procedures and functions.
Cursors are simply mapped to jOOQ Result types and can
thus be used like regular table results
Project EXPORT aims at exporting data from the database in
various serialisable formats, such as XML, CSV, HTML, Text, JSON.
This project will be continued in the future, to also
deserialise from (some of) these data streams. This will allow
for easy transport of jOOQ Result> types over the net.
Project CODEGEN has finally been started. Many improvements
suggested by jOOQ users will be implemented in the next releases.
In this release, important fixes have been made to prevent
compilation errors in generated artefacts.
Features and improvements
-------------------------
#61 - EXPORT: Add Result.formatXML()
#166 - CURSOR: Add support for ResultSet type returned from
Oracle stored procedures / functions
#411 - Allow for fetching Map (instead of Record)
and List