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 "<" for "<" and ">" 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.
