Version 3.6.0 - April 22, 2015
================================================================================

jOOQ goes Big Data with HANA
----------------------------

We've been working hard to add support for our 18th database dialect: SAP 
HANA,
which is now officially supported by the jOOQ Enterprise Edition. HANA is 
SAP's
excellent Big Data offering, supporting column stores combined with the 
power of
SQL standard OLAP functionality, such as window functions. Integrate HANA 
into
your Java or Scala applications with ease, using jOOQ!

Let's talk Scala
----------------

We're glad to welcome an increasingly big jOOQ-for-Scala community, an
integration where jOOQ really shines thanks to some advanced Scala language
features. In order to help you integrate even better, we've now added the 
new
ScalaGenerator that generates jOOQ meta data classes in Scala, instead of 
Java

Integrate your code generation with JPA or Vertabelo
----------------------------------------------------

In the previous release, we've implemented a new XMLDatabase that can load
arbitrary XML schema metadata formats (via XSLT). We've taken this a step
further using our new jOOQ-meta-extensions artefact, which hosts alternative
meta data sources, such as your JPA-annotated classes, or Vertabelo exports.

Speaking of XML
---------------

Our XML-in-the-database integration just got better! We're showing you in a
couple of example Bindings how to get the most out of your vendor-specific 
data
types, such as XML or JSON - which can be integrated into your jOOQ queries
effortlessly!

Let's talk some more DDL
------------------------

This release also adds support for a couple of additional DDL statements 
that
help you standardise your schema migrations for our 18 RDBMS. The newly
supported statements are:

- ALTER TABLE ADD CONSTRAINT (with UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK)
- ALTER TABLE DROP CONSTRAINT
- CREATE TEMPORARY TABLE

SQL 2 jOOQ parser
-----------------

One year ago, we've added the GUDU Software SQL 2 jOOQ parser with our
deliverables. While we still believe that this is an excellent product, we 
have
seen little demand from our users and customers - which is why we no longer 
ship
the parser. You can still download it from GUDU Software.

MULTISET and nested records
---------------------------

While we have published (as promised) some API for nested record support, 
we're
not quite convinced of its design yet. This is why this API is still marked 
as
"experimental". Stay tuned for future releases when we'll take these 
advanced
ORDBMS features one step further.

Tons of new convenience API and bugfixes
----------------------------------------

jOOQ wouldn't be jOOQ if it wasn't for the myriad convenience methods that 
make
your SQL integration lives so much easier. We've listened to our users and
customers and added another bulk of useful fetch(), execute(), map() and 
many
other convenience methods that make your SQL integration fun and efficient.


Full release notes can be found here:
http://www.jooq.org/notes


Features and improvements
-------------------------
#231 - Add BlobBinding and ClobBinding to use java.sql.Blob and 
java.sql.Clob on a JDBC level
#584 - Add a XMLasDOMBinding that can be used to bind SQLXML data types to 
org.w3c.dom.Node
#1363 - Generate a copy constructor for POJOs
#1391 - Add support for the Postgres "every" aggregate function
#1464 - Allow for a plugin architecture in jooq-meta, jooq-codegen, for 
custom schema-sources and generation-targets
#2221 - The manual's section about "Reusing a Query's PreparedStatement" 
does not mention what the behaviour is, when the underlying Connection is 
closed
#2498 - Add support for SQL Standard PERCENTILE_CONT() and 
PERCENTILE_DISC() inverse distribution functions
#2626 - Add org.jooq.SQL as a plain SQL type (for templating)
#2639 - Add stored procedure OUT values to DEBUG log output
#2664 - Add flag to Loader API to enable batch execution
#2686 - Add Result.fetchParents(ForeignKey) and 
Result.fetchChildren(ForeignKey) to fetch relations in a single query
#2899 - Support generating code based on JPA annotations
#2905 - Add support for named parameters in BatchBindStep.bind()
#2919 - Distinguish various PostgreSQL versions in the PostgreSQL family: 
9.3, 9.4
#2936 - Move .settings, and other Eclipse-related artefacts in a separate 
place
#3052 - Add a section to the manual explaining table-valued functions
#3188 - Add support for LEAD() / LAG() with Row[N] arguments
#3329 - Support the SQL standard array_agg function
#3336 - Add code generation flag to enable / disable imports in generated 
code
#3338 - Add support for ALTER TABLE ADD CONSTRAINT .. UNIQUE, PRIMARY KEY 
statements
#3376 - Add support for PostgreSQL SETOF functions
#3614 - DefaultRecordMapper only sets declared fields of the target type, 
no inherited fields
#3620 - Add section to the manual explaining how to use jOOQ with Nashorn
#3643 - Ensure that JPA annotations on private members are considered 
correctly
#3649 - Support DELETE FROM ... RETURNING
#3706 - Add a paragraph to the manual explaining how to manually unmarshal 
code generation Configuration via JAXB
#3708 - Emit a newline character when performing formatted logging
#3712 - Add Oracle Spatial examples
#3717 - Use try-with-resources in manual and tutorial
#3734 - Implement "$0" as a default expression in matcher strategy rules
#3744 - Add more precise subtypes for InvalidResultException
#3748 - Add public Routine T getValue(Parameter<T>) and setValue(Parameter, 
T) methods
#3765 - Add support for HANA
#3781 - Add support for DSL.trunc(date, DatePart) for H2
#3784 - Add additional <global[XXX]References/> flags to prevent generation 
of individual reference classes
#3797 - For table-valued functions, generate also a static method in 
Tables.java
#3800 - jOOQ-Meta should log formatted queries on exception
#3801 - Add Result#intoMap and Result#intoGroups variants that take field 
index or field name
#3808 - Improve manual's section about batching by making it clear that 
bind() binds records, not individual values
#3810 - Add fetchOne(RecordMapper) shortcut method to ResultQuery
#3816 - Use char literals instead of single-character String constants 
where applicable
#3819 - Add Constants.XSD_META and Constants.NS_META to describe the new 
jooq-meta-x.x.xsd
#3830 - Add support for XSL transformation to XMLDatabase
#3840 - Add a JavaEE example project with EJB and JSF
#3842 - Add DSL.field(Name), DSL.table(Name), DSL.schema(Name), 
DSL.sequence(Name) methods
#3843 - Deprecate DSL.fieldByName(), DSL.tableByName(), DSL.schemaByName(), 
DSL.sequenceByName()
#3844 - Add a new SQLDialect.DEFAULT instead of SQL99
#3846 - Let examples work with latest release, not with SNAPSHOTs
#3847 - Document the fact that Collection<? extends Condition> or 
Condition[] arguments are always and-connected
#3848 - Add DSL.dateSub() as a convenience for adding negative dates via 
DATE_ADD()
#3849 - Add PostgresDSL.stringToArray(X, Y, Z) support
#3851 - Add a @PlainSQL annotation to all methods that produce plain SQL 
objects
#3853 - Add support for CREATE TEMPORARY TABLE and all related flags
#3854 - Deprecate DSL.queryPart() in favour of DSL.sql()
#3865 - Add an example project showing how to use jOOQ with JavaFX
#3870 - Add support for aggregate FILTER clause
#3871 - Add support for PostgreSQL 9.4
#3872 - Emulate MEDIAN(x) via PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 
x) in PostgreSQL 9.4
#3873 - Add SQLDialect.predecessor() to establish historic dependencies 
between SQLDialects
#3874 - Add a AbstractXMLasObjectBinding that can be used to bind SQLXML 
data types to JAXB-annotated types
#3875 - Add support for PostgreSQL 9.4 ordered-set aggregate functions
#3876 - Add support for SQL Server 2014
#3878 - Add R[] ResultQuery.fetchArray()
#3879 - Rename Result.intoArray() into Result.intoArrays()
#3882 - Overload JavaGenerator.generateXXX() methods to contain a 
JavaWriter argument
#3886 - Add Field<Record[N]> DSL.field(Row[N]) to allow for nesting rows in 
SELECT clauses
#3889 - Add DataType.getBinding()
#3891 - Cache Record Constructor in CursorImpl
#3894 - Clarify Record.getValue() behaviour in Javadoc
#3897 - Add support for nested "to-one" POJOs in DefaultRecordMapper
#3900 - Implement better formatting for nested Records
#3904 - Add DSL.and(Condition...) / DSL.or(Condition...)
#3907 - Upgrade Spring version in tutorials / manuals
#3915 - Calls to Configuration.derive() create a Configuration that 
indirectly references the previous Configuration instance
#3928 - Add support for ORA_ROWSCN, SCN_TO_TIMESTAMP() to OracleDSL
#3931 - Add RenderKeywordStyle.AS_IS
#3934 - Add StopWatch.split() to get current time
#3941 - Add additional DSL.param() methods to create unnamed bind value 
placeholders
#3956 - Add Configuration set(DataSource) and set(Connection) for 
convenience
#3961 - Apply Base64 encoding to binary types when formatting them to XML, 
JSON, etc.
#3975 - Add support for bulk insertion in the Loader API
#3981 - Implement Meta.getTables()[x].getPrimaryKey().getReferences()
#3983 - Add <T> List DSLContext.fetchValues(TableField)
#3984 - Implement Meta.getTables()[x].getReferences()
#3985 - Add support for more PostgreSQL array functions
#3986 - Add DSL.choose() as a synonym for DSL.decode(), and 
DSL.when(Field), DSL.when(Condition) as shortcuts
#3992 - Add <T> DSL.coalesce(Field, T)
#4004 - Make the manual's version bar at the top a coloured bar
#4009 - Add <R extends Record> Table DSL.table(R...)
#4012 - Add new LoaderConfigurationException to indicate bad configurations 
in Loader API
#4013 - Add int Loader.executed(), a new counter that counts the number of 
executed statements
#4019 - Add system property to remove the logo from the log output
#4021 - Add a ScalaGenerator
#4027 - Let INSERT statements default to using DEFAULT VALUES when no 
values are specified
#4044 - Add support for ALTER TABLE DROP CONSTRAINT statements
#4045 - Add AlterTableStep.addColumn() and dropColumn() methods as synonyms 
for add() and drop()
#4046 - Add support for ALTER TABLE ADD CONSTRAINT .. FOREIGN KEY statements
#4047 - Add DSL.deleteFrom() alias for DSL.delete()
#4048 - Add support for ALTER TABLE ADD CONSTRAINT .. CHECK statements
#4058 - Mention SimpleFlatMapper from the jOOQ manual
#4063 - Add DSLContext.truncate(String) convenience method
#4064 - Add PostgreSQL support for DSLContext.lastId()
#4071 - Emit a warning when a batch statement doesn't receive the right 
number of bind values
#4085 - Add DSL.list(QueryPart...) to allow for creating lists in SQL 
templates
#4086 - Add a manual section about Record.into(Table<?>)
#4097 - Use SQL standard EXTRACT() function also in Oracle
#4099 - Document how to use Converter and Binding without the code generator
#4105 - Add an optional, synthetic COLUMNS clause to the INSERT API for 
convenience
#4107 - Add Routine.getReturnParameter()
#4108 - Add ExecuteListener.outStart(ExecuteContext) and 
outEnd(ExecuteContext) to capture fetching of Routine OUT parameters
#4110 - Overload DDL API to accept Name instead of String arguments
#4122 - Log code generation configuration XML only in DEBUG level
#4125 - Add MockConnectionProvider and MockConfiguration for convenience
#4126 - Add void DSLContext.mock(MockDataProvider, MockRunnable) and <T> T 
mockResult(MockDataProvider, MockCallable)
#4127 - Upgrade embedded jOOR dependency to 0.9.5
#4129 - Add support for @javax.persistence.Id
#4140 - Recognize SQLDroid JDBC URLs in JDBCUtils.dialect(String)
#4141 - Add support for specifying the encoding when loading CSV or JSON 
with the Loader API
#4143 - Add onRow(LoaderRowListener) to the Loader API
#4144 - Explain the rationale of the transaction examples in the manual
#4146 - Generate PL/SQL constants
#4152 - Add <T> Field TableLike.field( { String | int }, { Class, DataType, 
Field } )
#4154 - Link to source code from http://www.jooq.org/java-8-and-sql
#4174 - Split the manual's section about the INSERT statement in several 
sections
#4179 - Add support for MySQL's mandatory ON clause in the DROP INDEX 
statement
#4198 - Improve manual section about SQL injection
#4206 - Add Converter<T, T> Converters.identity(Class) to produce an 
identity converter
#4207 - Upgrade Spring Boot version in example to 1.2.3.
#4214 - Add jOOQ-meta-extensions artefact to group JPADatabase, Vertabelo 
Database and others
#4215 - Remove Gudu Software's SQL 2 jOOQ Parser from deliverable
#4216 - Remove obsolete "release" profile from pom.xml files
#4219 - Implement an instance toString() method on JSONObject

API changes (backwards-compatible)
----------------------------------

API changes (backwards-incompatible)
------------------------------------
#3855 - Oracle REAL and FLOAT types cause code generator to produce 
BigInteger instead of Double types
#3885 - Add a SelectField marker interface that allows for alternative 
column expressions in the SELECT clause
#4106 - Add support for T-SQL optional INTEGER return values from stored 
procedures
#4196 - UpdateResultStep is erroneously declared as a subtype of Insert

Behavioural changes (backwards-incompatible)
--------------------------------------------
#3860 - Allow to specify defaults for all regular expression flags in the 
code generation configuration. Add CASE_INSENSITIVE to defaults
#3982 - Empty, OR-connected CombinedConditions should return FALSE, not TRUE
#4161 - { INSERT | UPDATE | MERGE } .. SET [ Record ] doesn't take changed 
flags into account

Bug fixes
---------

#2522 - Codegen Schema mapping doesn't work for UDT
#2647 - Code generation error when Postgres stored function contains 
several parameters with the same name
#3170 - Improve manual's jOOQ examples by always using fetch() or execute() 
where applicable
#3255 - DataTypeException: Cannot convert from "" (class java.lang.String) 
to class [B when casting to MySQL BINARY types
#3341 - Cannot use ALTER TABLE ADD or CHANGE statements on MySQL for all 
column data types
#3378 - Error when fully qualifying PostgreSQL table-valued functions in 
SELECT clauses
#3417 - Add documentation about DEFAULT and DEFAULT VALUES to INSERT and 
UPDATE manual pages
#3727 - Invalid SQL generated when window definitions from WINDOW clause 
contain frame clauses
#3745 - NullPointerException when <jdbc/> is not provided and isn't 
provided either
#3778 - PostgreSQL enum array types have to be cast with their fully 
qualified name
#3803 - CREATE TABLE statement does not generate NOT NULL constraint
#3809 - Fix typo in Javadoc in ResultQuery
#3811 - Potential NullPointerException in Cursor.fetchOne(RecordMapper) and 
other methods
#3817 - When used with set operations, ORDER BY must not contain any 
qualified fields
#3822 - Invalid SQL for Postgres created with values(Row1...)
#3824 - PostgreSQL dateAdd() erroneously returns a TIMESTAMP value
#3831 - <dateAsTimestamp/> deprecation warning is displayed even if the 
flag is not active
#3833 - org.jooq.CreateTableAsStep.column(Field<T> field, DataType type) 
SQLite
#3835 - SQLite's CREATE VIEW statement doesn't allow to rename columns
#3838 - Bad @Support annotations on ALTER TABLE statements, which are not 
supported by SQLite
#3845 - NullPointerException in code generator when there is an empty 
<inputSchema/> element in Oracle
#3850 - Broken link towards 3.5 documentation in 2.6 documentation
#3861 - Minor manual typo
#3863 - CSV-Export with delimiter only does not work properly
#3877 - Generated "fetchBy[ColumnName]" methods in DAOs shouldn't Mode.POJO
#3880 - Cannot access private JavaGenerator.newJavaWriter() method
#3888 - Data type conversion fails when using a Binding<byte[], 
Serializable> and passing a byte[] as user input
#3899 - Compilation error in generated code when a sequence name ends with $
#3905 - LoggerListener and StopWatchListener should be placed after user 
listeners
#3909 - Inefficient number to number conversion in org.jooq.tools.Convert
#3911 - DefaultRecordMapper ignores @ConstructorProperties for property 
names that don't have a matching getter
#3919 - Bad caching of JPA-annotated getters leads to wrong mapping into 
POJOs that have @ConstructorProperties
#3932 - jooq-runtime-3.5.0.xsd declares wrong namespace
#3936 - AbstractQuery unnecessarily creates two DefaultRenderContext 
instances.
#3940 - Batch statements do not work when queries contain inlined bind 
variables
#3944 - AbstractScope creates an excessive amount of HashMaps, internally
#3946 - Replace ArrayList<ExecuteListener> by ExecuteListener[] in 
ExecuteListeners to avoid excessive Iterator creation
#3947 - Avoid creating unnecessary Iterators and ArrayLists in 
AbstractStore.getAttachables()
#3954 - Avoid wrapping Field[] in a new RowImpl every time a Record is 
created
#3957 - java.lang.NoSuchMethodException: createARRAY when using Oracle 
arrays with BoneCP
#3962 - The H2 emulation of SHR might produce rounding errors
#3966 - Inefficient BIT_COUNT() function for those dialects that do not 
natively support SHR()
#3977 - Meta.getTables() also returns entries for indexes for PostgreSQL
#3987 - The manual refers to a non-existing DSLContent.decode() function, 
which is really contained in DSL
#3988 - Incorrect IntelliJ directory listings in .gitignore
#3993 - ResultQuery.fetchAny() methods Javadoc erroneously claims throwing 
of InvalidResultException
#3998 - Cache internal BindingGetResultSetContext instance across a single 
Cursor
#4000 - Avoid {ResultSet | CallableStatement | SQLInput).wasNull() calls if 
not necessary, as they're somewhat expensive on some JDBC drivers
#4010 - Confusing wording in manual section about org.jooq.Binding
#4011 - Loader does not call release() when acquiring connections to commit 
transactions
#4017 - jooq-meta-3.5.0.xsd is not valid XSD 1.0
#4022 - NullPointerException when generating SQLite table with composite 
primary key
#4026 - Add a "USE library" command to the manual's tutorial
#4028 - Loader API's "onDuplicateKeyIgnore()" executes inefficient SELECT
#4036 - Obsolete remark in RecordListener Javadoc about batch semantics
#4041 - Bad unnesting of UDT arrays in PostgreSQL
#4052 - NullPointerException when generating source code for PostgreSQL 
table-valued function that returns nested arrays
#4056 - Query.bind(String, Object) binds only to the first occurrence of a 
named bind value
#4065 - Exception when loading array results from plain SQL queries into a 
Record
#4075 - Bad result from Query.getBindValues() when named Params are repeated
#4079 - Boolean datatype not handled with MySQL dialect
#4091 - ORA-01461: can bind a LONG value only for insert into a LONG 
column, RC=5100
#4093 - Typo in Javadoc on DataType.asConvertedDataType()
#4096 - jooq-meta-3.5.2.xsd doesn't specify the right namespaces
#4100 - Use "&lt;" for "<" and "&gt;" for ">" in javadoc
#4101 - Wrong DSL.currentTimestamp() and currentTime() implementations in 
Oracle
#4114 - Compilation error when a stored procedure has a parameter named 
"value" and the generator strategy generates lower case literals
#4117 - Invalid SQL generated when using UNSIGNED data types with MySQL DDL 
statements
#4120 - Invalid SQL generated when using TINYTEXT with MySQL DDL statements
#4121 - Row value expression IN predicates with subqueries are not 
formatted correctly
#4128 - @javax.persistence.Column.name() is case-insensitive
#4132 - GeneratorStrategy.instanceFields should be true by default
#4134 - No milliseconds value when reading Timestamp values from SQLite
#4147 - SQLDialectNotSupportedException: ARRAY TABLE is not supported for 
SQL99
#4151 - FOR UPDATE .. OF doesn't allow qualified column names
#4156 - Cannot fetch REF CURSOR OUT parameters from Oracle stored 
procedures when using SQLDialect.ORACLE11G
#4157 - Package procedures without arguments are not generated in Oracle 12c
#4160 - SQL generated by DSL.dateAdd() is invalid for certain dates in 
Oracle
#4170 - Schema name rendered twice when calling static member procedure in 
Oracle
#4173 - NullPointerException when using SQL99 dialect with XMLDatabase for 
code generation
#4176 - Wrong @Support value for SQLite which doesn't support DEFAULT in 
INSERT or UPDATE statements
#4182 - ArrayIndexOutOfBoundsException in org.jooq.impl.Utils.renderAndBind
#4185 - ExecuteType.BATCH JavaDoc: not yet supported
#4187 - SQLite timestamps with trailing fractional zeros are misinterpreted
#4190 - Generated Record.values() does nothing
#4193 - Wrong H2 routines generated since recent H2 version
#4197 - Incomplete Javadoc and @Support annotation on UPDATE .. RETURNING 
with respect to DB2 emulation
#4204 - Broken JavaFX example

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to