We're super excited to announce 


Version 3.5.0 - November 21, 2014
================================================================================

The new Binding SPI
-------------------

The main improvement of this exciting release is the new org.jooq.Binding SPI
which can be used to fully control all aspects of a user-type's JDBC 
interaction.
This goes much further than the existing org.jooq.Converter SPI that can be used
to map standard JDBC types to user-types. With the new Binding SPI, virtually
*ALL* vendor-specific types can be supported now. Examples include PostgreSQL's
JSON or HSTORE types, or Oracle's DATE type - which is really incorrectly
represented via java.sql.Timestamp, which is why we have retrofitted the 
existing
<dateAsTimestamp/> feature to use such bindings, now.

Stored procedures are everywhere
--------------------------------

Stored procedure support was generally improved in this release. This includes
lots of new little features and conveniences for use with PL/SQL or 
Transact-SQL.
For instance, jOOQ 3.5.0 now supports cross-schema references of PL/SQL OBJECT
and TABLE types, which allows for binding directly to Oracle Spatial. We've
blogged about this exciting improvement here:
http://blog.jooq.org/2014/11/04/painless-access-from-java-to-plsql-procedures-with-jooq/

And while we were at it, we've also added basic support for Oracle AQ, which
integrates very nicely with our OBJECT type support!

In Transact-SQL and MySQL, we now support fetching arbitrary numbers of Results
from stored procedures, and we've also implemented support for Firebird PSQL,
including Firebird's very interesting syntax for table-valued functions.

By the way, we support user-defined aggregate functions for a variety of
databases, including Oracle, PostgreSQL, and HSQLDB. Definitely something you
should look into!

SQL improvements
----------------

In this release, we've finally got support for UNION, INTERSECT, and EXCEPT
right with respect to nesting such operations, as well as combining them with
ORDER BY and LIMIT .. OFFSET.

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

We've continued to add support for DDL statements, including

- CREATE TABLE
- CREATE TABLE AS SELECT
- CREATE VIEW and DROP VIEW
- CREATE INDEX and DROP INDEX
- CREATE SEQUENCE and DROP SEQUENCE
- DROP .. IF EXISTS

We'll continue to add support for more DDL statements also in the future.

Code generation improvements
----------------------------

We've added support for the new XMLDatabase, a code generation configuration
that allows to read meta information from XML formats, e.g. from a standard
INFORMATION_SCHEMA.xml, or from Vertabelo's XML export format:
http://blog.jooq.org/2014/09/05/importing-your-erd-export-into-jooq/

Future versions of jOOQ will include built-in support for a variety of XML 
formats.

We've had an awesome contribution by Etienne Studer from Gradleware to help our
users integrate the jOOQ code generation with their Gradle builds.

Last but not least: Informix!
-----------------------------

Oh, and by the way, we now also support IBM's second most popular database:
Informix. Support for this database will be included in the jOOQ Enterprise
Edition.


More information can be found here:

http://www.jooq.org/notes


Stay tuned as we'll be updating the manual and blogging about the new features

next week!



Features and improvements
-------------------------
#561  - Add support for the Informix database
#994  - Add support for the Postgres "hstore" data type
#1341 - Add DSL.using(String url) and other methods that mimick 
DriverManager.getConnection()
#1380 - Generate equals(), hashCode() on POJOs
#1392 - Add formatInsert() to render insert statements from a Result
#1410 - Add support for the Postgres "DISTINCT ON" clause
#1658 - Add support for SQL standard UNION syntax. jOOQ's current understanding 
of UNION is just convenience
#1761 - Reference manual versions between each other
#2054 - Implement quantified comparison predicates for Row[N] row value 
expressions
#2155 - Add Converter support to Routines and UDTs
#2209 - Add <T1, T2, .., T[N]> Result<Record[N]<T1, T2, .., T[N]>> 
Result.into(Field<T1>, Field<T2>, .., Field<T[N]>) in order to transform 
Results / Records into another type
#2289 - Add jOOQ-flyway-example, a documentation module to show how to 
integrate with Flyway
#2604 - Add section to the manual explaining how asynchronous querying can be 
achieved
#2674 - Add support for stored procedures in MockConnection / MockDataProvider 
/ MockExecuteContext
#2788 - Add support for the PostgreSQL "json" data type
#2886 - jooq-codegen-maven should look into project dependencies for jdbc driver
#2907 - Emulate UPDATE .. RETURNING through SELECT FROM FINAL TABLE (UPDATE 
...) in DB2
#2925 - Add support for Firebird stored procedures
#3121 - Skip code re-generation when schema is known to be the same
#3151 - Add "question mark" with tool-tip to the manual to allow for jumping to 
the "how to read this manual" section
#3248 - Add support for Binding (i.e. "Type Providers")
#3337 - Add support for the CREATE TABLE statement
#3339 - Add support for CREATE INDEX and DROP INDEX statements
#3340 - Add support for CREATE VIEW and DROP VIEW statements
#3346 - Allow for omitting the JDBC driver property in the code generator
#3355 - Add support for CREATE SEQUENCE and DROP SEQUENCE statements
#3370 - Allow for overriding the class Javadocs for generated objects
#3375 - Add support for PostgreSQL table-valued functions
#3381 - Add support for CREATE TABLE AS statements
#3386 - Add some test cases using Java 8 Streams for functional-relational 
transformation
#3388 - Replace SQL Server's ROW_NUMBER() OVER(ORDER BY @@version) by ORDER BY 
(SELECT 0)
#3389 - Add DSLContext.currval(String) and nextval(String) for convenience
#3412 - Add List DSLContext.fetchValues(...) similar to the existing 
fetchValue(...) methods
#3418 - Add DSL.defaultValue(Field<T>) for convenience
#3425 - Add support for Oracle AQ
#3431 - Add support for MySQL index hints
#3435 - Add support for SQL Server's SELECT .. INTO [new table] syntax
#3442 - Implement MockResultSet.getArray() methods
#3443 - Add support for conversion of values / arrays to the JDBC Array type in 
Convert
#3444 - Add MockArray, a mock implementation of JDBC's Array type
#3451 - Add XMLDatabase to generate a database schema from an XML file
#3477 - Add Field.as(Field) to rename a field to another field's name
#3480 - Add XXXContext.dialect() and XXXContext.family() for convenience
#3483 - Let <forcedType/>'s <expression/> match both fully qualified column 
names as well as unqualified column names
#3495 - Add an example project showing how to use jOOQ's code generator with 
Gradle
#3496 - Log a DEBUG message when a Query is executed which returns 
Query.isExecutable() == false
#3501 - Add ResultQuery.fetchSet() and Result.intoSet() methods to return 
LinkedHashSets
#3506 - Instrument the jOOQ API during integration tests to verify correct 
application of @Support annotations
#3511 - Improve DISTINCT predicate emulation through INTERSECT
#3512 - Add DSL.count(Table<?>) and DSL.countDistinct(Table<?>) to support the 
PostgreSQL-specific COUNT() extension
#3513 - Streaming version of formatCSV/formatXML
#3519 - Document the PostgreSQL JDBC's limitations with respect to large 
cursors when using Connection.autoCommit = true
#3525 - Implement more verbose DEBUG logging for jOOQ-meta's include / exclude 
mechanism
#3532 - Add support for DROP ... IF EXISTS clauses in DDL
#3551 - Copy plain SQL query construction API to DSL from DSLContext
#3557 - Add support for PostgreSQL user-defined aggregate functions
#3558 - Add Setting to enable / disable fetching of warnings
#3559 - Propagate jOOQ-codegen's relations flag also to jOOQ-meta, to prevent 
(possibly expensive) queries to fetch relations
#3565 - Add XXXContext.settings() for convenience
#3566 - Add GenerationTool.generate(String) to generate code from an XML string
#3569 - The <database/> tag is no longer mandatory in the code generator 
configuration
#3579 - Emulate nested set operators in databases that don't support them 
natively
#3592 - Add Setting to enable Oracle scalar subquery caching for stored 
function calls
#3595 - Add MockResult<init>(Record data) convenience constructor
#3596 - Let code generator empty generated packages on a per-schema basis
#3597 - Generate table and column comments also for PostgreSQL
#3598 - If tables define their own comments, don't generate "This class is 
generated by jOOQ." in Javadocs
#3599 - Implement nicer formatting of @Generated annotation
#3600 - Add support for SQL standard SELECT .. WITH CHECK OPTION
#3610 - Explain the differences between keeping generated sources under version 
control or not
#3611 - Add a jOOQ / Nashorn example to the repository
#3612 - Add an example project showing how to import an ERD export format to 
the code generator
#3622 - Add support for Field.in(Result<Record1<T>>) and 
Row[N].in(Result<RecordN<T1, ..., TN>>)
#3623 - Add ParamType.NAMED_OR_INLINED to render named parameters only if a 
name is given
#3626 - Add Map<S, Result<R>> Result.intoGroups(Table<S>)
#3627 - Add simplified API for CASE WHEN [ condition ] THEN [ select ] 
expressions
#3628 - Add <T> Field<T> DSL.field(Select<? extends Record1<T>>)
#3633 - Add a section to the manual about jOOQ and NoSQL
#3638 - Let ResultQuery<R> extend Iterable<R>
#3644 - Enhance DSL API to work around Nashorn interoperability issue with 
overloading and varargs
#3661 - Log some info about the type being matched by a <forcedType/> 
configuration
#3667 - <types/> configuration doesn't work for Derby DATE types
#3668 - Let GenerationTool also search absolute and relative paths
#3669 - Make the code generator's <database/> element optional
#3670 - Add DSL.coerce(Object, ...<T>) for convenience
#3671 - Add alternative DSL.concat() syntax for convenience
#3672 - Add OracleDSL.toNumber()
#3677 - Add a paragraph to the manual indicating that the manual is licensed 
CC-BY-SA 4.0
#3678 - Add some JavaBeans-style setters to the DefaultConfiguration to 
simplify configuration via Spring
#3680 - Remove all unit tests that make assumptions on how exactly the SQL is 
rendered
#3681 - Fetch all result sets from executed stored procedures
#3688 - Remove the confusing CO_AUTHOR_ID column from the manual
#3690 - Add a manual page header indicating that a version has gone "end of 
life"
#3702 - Add Configuration.family() for convenience and API consistency
#3740 - Add Table.newRecord() and UDT.newRecord() to construct new records with 
DefaultConfiguration
#3746 - Add DSLContext.fetchExists(Select<?>)
#3752 - Make <jdbc/> element optional in code generation configuration
#3754 - Explain primitive type conversion in Convert.convert() Javadoc
#3756 - Regenerate files only if there is a difference
#3760 - Add Record.intoList()
#3769 - Add org.jooq.Converters, a chained Converter implementation
#3773 - Explain jOOQ's understanding of Configuration thread safety in the 
Configuration Javadoc
#3775 - Let QueryPart.toString() generate formatted SQL
#3782 - Add a method to create a org.jooq.util.Database by SQLDialect

API changes (backwards-compatible)
----------------------------------
#3345 - Deprecate org.jooq.api.annotation.State and Transition annotations
#3356 - Deprecate Select.fetchCount()
#3703 - Deprecate CastMode.SOME and RenderContext.cast()
#3770 - Deprecate <dateAsTimestamp/>

API changes (backwards-incompatible)
------------------------------------

Behavioural changes (backwards-incompatible)
--------------------------------------------

#2486 - Allow to specify precision, scale, length for type-rewrites in 
<forcedType/>
#3000 - Add Setting to enable MySQL backslash escaping
#3407 - DDL statements accepting String names should generate quoted names, not 
plain SQL
#3541 - Change DSLContext.nextval(String) and currval(String) to internally 
call DSL.sequenceByName() instead of DSL.sequence()

Bug fixes
---------
#2080 - Syntax error in rendered SQL when using limit().offset() with aliased 
projections in SQL Server
#3206 - DSL.field(Condition) doesn't correctly handle NULLs when emulating 
boolean fields with a CASE expression
#3347 - Field.in(T...) should defend against Collection arguments
#3353 - Manual Javadoc anchors are no longer correct with the recent changes of 
JDK 8 Javadocs
#3359 - store() after copy() executes an UPDATE instead of an INSERT, when 
Settings.updatablePrimaryKeys is set
#3360 - SQLite regression when using special characters in identifiers
#3362 - DSLContext.batchStore() executes INSERT if records are batch stores are 
executed two times in a row on new records, if Settings.updatablePrimaryKeys is 
set to true
#3363 - UpdatableRecord.store() executes UPDATE instead of INSERT after 
delete(), if Settings.updatablePrimaryKeys is set to true
#3369 - Render CAST(? AS DATE) for java.sql.Timestamp bind values that are 
bound to Oracle DATE columns
#3372 - The syntheticPrimaryKeys code generation option is currently 
undocumented
#3373 - The manual's page about the DUAL table does not list all the supported 
databases
#3382 - NOT NULL constraints and type information are incorrectly generated 
when using Firebird DOMAINs for data types
#3390 - Add missing documentation about the new jOOQ 3.4 transaction API
#3392 - Call setAccessible(true) only if really needed
#3400 - ALTER TABLE generates invalid syntax on Firebird when data types are 
nullable
#3402 - Wrong character length generated by jOOQ for Firebird
#3408 - Remove the default log4j.xml configuration file from the maven plugin 
again
#3413 - Oracle generated ArrayRecords cannot be constructed through reflection 
if deprecated flag is set to off
#3420 - NullPointerException when generating code for Oracle AQ Tables
#3427 - Internal QueryCollectorSignal exception escapes into user code when not 
dealt with in ExecuteListener
#3430 - JDBC escape syntax is not correctly rendered from plain SQL when plain 
SQL contains newlines
#3436 - Manual sections about transactions documents ctx to be a DSLContext 
instead of Configuration
#3437 - QualifiedField does not respect RenderContext.qualify()
#3445 - Cannot run Maven code generator with professional edition
#3450 - Backslashes in SQL comments don't get escaped
#3455 - UPDATE .. FROM statement renders incorrect SQL for derived tables or 
aliased tables
#3456 - Name clash in generated code when Routine argument is called "f" 
(functions) or "p" (procedures)
#3462 - Field<Object>.in(Object...) can be called with Select<?> arguments, 
accidentally
#3463 - Field.in(...) methods shouldn't return trueCondition() or 
falseCondition()
#3473 - java.lang.IllegalArgumentException: Field (null) is not contained in Row
#3488 - Compilation error in generated code, when a similar tables T_A and TA 
exist
#3489 - DefaultTransactionProvider does not call 
Connection.releaseSavepoint(Savepoint) after commit
#3507 - Bad @Support annotation on Select.intersect() and Select.except()
#3514 - ResultQuery.fetchLazy() ignores fetchSize()
#3520 - Duplicate column information in foreign key references for foreign keys 
that share the same name in different tables
#3526 - Unnecessary warning logs introduced in code generation
#3533 - Avoid using named parameters for Oracle, if not really needed
#3537 - Incorrect call to releaseSavepoint()
#3542 - Oracle DDL statements do not allow for using bind variables
#3544 - Add a DDLQuery marker interface, which all DDL Query types should extend
#3545 - Error when using qualified, case-sensitive sequence names in H2
#3547 - DSLContext.batch(String) doesn't accept bind variables
#3552 - Oracle Stored procedures using type synonyms in signatures cannot be 
used through jOOQ
#3556 - Generated Oracle Stored procedures do not reference types from other 
schemas
#3560 - Slow discovery of primary keys in very large MySQL databases
#3567 - Code generator error message refers to wrong XSD
#3577 - Don't render "empty" OFFSET 0 clauses
#3578 - Slight manual bug referring to inexistent ExecuteContext.dialect() 
method
#3582 - Record.from(Object) does not consider DataType.nullable() which may 
lead to constraint violations when inserting
#3586 - Context.paramType() is initially null instead of INDEXED
#3590 - Manual erroneously claims that the SQL standard allows SELECT without 
FROM
#3591 - Compilation error generated in manual's tutorial code
#3602 - Cannot INSERT into view
#3608 - Typo in documentation of transaction method
#3624 - Compilation errors when Converters are applied to generated Routines 
and UDTs
#3630 - ArrayOutOfBoundsException when using backslash escaping in MySQL with 
jOOQ plain SQL
#3634 - Record.into(Table) maps to the wrong table when passing an aliased 
table after a self-join
#3639 - java.lang.NoSuchMethodException: createARRAY when using Oracle arrays 
with Spring TransactionAwareDataSourceProxy
#3648 - Use JDBC Escape syntax for MySQL Date / Time literals to circumvent a 
known MySQL bug
#3650 - NullPointerException on TableRecord.insert() when primary key 
information is not present
#3664 - UNION ALL, ORDER BY, and LIMIT regression
#3665 - Typos in Javadocs
#3673 - OracleDSL.toChar() methods shouldn't require String types
#3682 - PostgreSQL INSERT .. RETURNING doesn't work with plain SQL table
#3696 - OutOfMemoryError with SQL Azure, caused by long-running loop of 
consuming further exceptions
#3705 - The jOOQ "flash log" doesn't display nicely when using java.util.logging
#3711 - Incorrect code generated for cross-schema OBJECT type references
#3718 - Exceptions on rollback hide the original exceptions causing the rollback
#3723 - Add org.jooq.Scope to unify all Configuration, Settings, and data map 
access in a single API
#3730 - Cannot use regex COMMENTS in <forcedType/>'s <expression/>
#3732 - Improve performance of <forcedType/> regex evaluation
#3733 - Code generator should use CHAR_LENGTH columns for Oracle, instead of 
DATA_LENGTH
#3741 - MySQL ResultSet streaming conflicts with internal SHOW WARNINGS call
#3758 - ExecuteListener.warning() is not listed as a method in the Javadoc
#3762 - Bad emulation of DUAL table in HSQLDB when connecting with a DBA user 
on a database with more than one user
#3792 - Code generator erroneously refers to "singleton instances" of tables in 
generated Javadoc

-- 
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