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.
