diff --git a/jOOQ-release/release/template/RELEASENOTES.txt b/jOOQ-release/release/template/RELEASENOTES.txt index 518b49f8e7..c4d543f99c 100644 --- a/jOOQ-release/release/template/RELEASENOTES.txt +++ b/jOOQ-release/release/template/RELEASENOTES.txt @@ -16,11 +16,36 @@ Version 3.4.0-SNAPSHOT - February 18, 2014 This is a snapshot preview version of jOOQ 3.4.0. Please do not use this version in production. +Features and improvements +------------------------- +#2573 - Generate DAOs for tables with composite primary keys +#3010 - Generate POJOs for Oracle and PostgreSQL UDTs +#3030 - Add support for ALTER SEQUENCE ... RESTART [ WITH ... ] +#3075 - Add support for Oracle TEMPORARY tables +#3076 - Add ExecuteListener.warning(ExecuteContext) to allow for listening to + SQLWarnings +#3077 - Let Sequence implement QueryPart +#3080 - Generate Interfaces for Oracle and PostgreSQL UDTs +#3081 - Let generated POJOs reference generated UDT POJOs instead of UDT Records +#3084 - SQL Server unique indexes are not loaded by jOOQ-meta +#3093 - Add code-generation configuration to treat UNIQUE keys as primary keys + to generate UpdatableTables +#3094 - Add Relations.getUniqueKeys(SchemaDefinition), getUniqueKeys() +#3095 - Add SchemaDefinition.getTables() +#3096 - Add Constants.XSD_RUNTIME, NS_RUNTIME, XSD_CODEGEN, NS_CODEGEN + Bug fixes --------- +#3011 - Routines do not propagate errors raised from T-SQL with sqljdbc_4.0 #3055 - Add missing MariaDB and MS Access support to the manual #3057 - Wrong paths in maven-install.sh and maven-install.bat #3060 - Conversion fails for Oracle VARRAY / TABLE types, nested in UDTs +#3069 - jOOQ calls Clob.free(), which is available only in JDBC 4.0 / Java 1.6 +#3090 - Bad predicates generated from nullable keys on refresh(), update(), + delete() +#3101 - MutablePOJOMapper doesn't work with annotated boolean getters +#3108 - Local Fields' Converters should be preferred over globally registered + Converters Version 3.3.0 - February 14, 2014 ================================================================================ @@ -30,7 +55,7 @@ important feature first: The SEEK method --------------- - + We've been blogging about keyset paging before: - http://blog.jooq.org/2013/10/26/faster-sql-paging-with-jooq-using-the-seek-method/ @@ -42,7 +67,7 @@ paging very easily. jOOQ is the only database software out there to do so! Gudu Software's SQL 2 jOOQ Parser --------------------------------- - + We're very happy to announce our collaboration with Gudu Software Ltd who have implemented a very powerful SQL parser and transformer for enterprise databases. @@ -69,10 +94,10 @@ on the commercial gsp.jar parser, whose trial licensing terms can be seen here: Great new SQL Feature Support ----------------------------- - + We've been looking around for SQL standard and vendor-specific features, such as the WINDOW clause (standard!), CROSS APPLY, OUTER APPLY, LATERAL join, DEFAULTs -for inserts, and nice datetime arithmetic functions and emulations thereof. +for inserts, and nice datetime arithmetic functions and emulations thereof. As always, we've also blogged about all these features. See the following links for more details: @@ -84,7 +109,7 @@ for more details: Formal Spring integration support --------------------------------- - + Spring is one of the most popular frameworks to handle transactions, and it does so very well. With the help of our community, we've established new standards and examples of how to get started very quickly with jOOQ and Spring. See the following @@ -107,7 +132,7 @@ Features and improvements typesafety when fetching single values #2576 - Integrate with Travis-CI to run automated builds #2657 - Add support for ORDER BY .. SEEK .. LIMIT to implement the "seek method" - for faster offsets + for faster offsets #2709 - Add Record[N].value1(xx), value2(xx) setter methods #2734 - Add support for lateral derived tables #2744 - Emulate INSERT .. RETURNING through SELECT FROM FINAL TABLE (INSERT ...) @@ -125,7 +150,7 @@ Features and improvements #2805 - Add seekAfter() and seekBefore() to allow for paging in both directions #2806 - Add ResultQuery.fetchSize() to influence the JDBC Statement's fetch size #2809 - Add support for MySQL's MID() function, which is a synonym for - SUBSTRING() + SUBSTRING() #2810 - Add support for the REVERSE() function, where it is supported #2824 - Log 500 records on TRACE level, instead of just 5 #2828 - Use a default Database for code generation, in the absence of an @@ -150,7 +175,7 @@ Features and improvements DSL.countDistinct() #2885 - Generated enum values contain extra comma #2891 - Add a jOOQ / Spring-TX example to GitHub under jOOQ-examples -#2894 - Enable automated CI on github +#2894 - Enable automated CI on github #2898 - Add DSL.generateSeries(int, Field) and (Field, int) overloads #2900 - Overload MockFileDatabase constructor to allow for Readers, @@ -164,7 +189,7 @@ Features and improvements #2932 - Retry loading the GenerationTool configuration file with a / prepended if it fails #2933 - Add {Result.into|ResultQuery.fetch}{Map|Group}({Field|Field[]}, - RecordMapper) + RecordMapper) #2944 - Add support for GROUP_CONCAT in SQLite #2945 - Deprecate the code generation flag #2946 - Add a section to the manual explaining how to programmatically @@ -179,7 +204,7 @@ Features and improvements #2981 - Add an official Spring / Guice example #2984 - Add Table table(Result) to allow to fetch from / join / etc in-memory tables -#2985 - Add DSL.values(RowN...) +#2985 - Add DSL.values(RowN...) #3001 - Add VisitContext.clausesLength() and queryPartsLength() to indicate the depth of the currently visited QueryPart tree #3002 - Add the BindVariableAbbreviator VisitListener example to the manual @@ -196,7 +221,7 @@ API changes (backwards-compatible) #2837 - Deprecate code generation configuration's in favour of #2878 - Deprecate Record.getValue() and Result.getValue() methods that take a - defaultValue argument + defaultValue argument #3007 - Add API guarantee to ResultQuery.fetch() methods indicating that all JDBC resources are freed @@ -218,7 +243,7 @@ Bug fixes NUMBER(..) column in Oracle #2633 - Fix manual to link to appropriate Javadoc #2655 - Improve ArrayIndexOutOfBoundsException: -1 error message when unknown - field is accessed from a record + field is accessed from a record #2658 - Inefficient emulation of row value expression comparison predicates <, <=, >, >=. Factor out predicates for improved index usage #2773 - Confusion of Unix vs Windows style line terminators in source code @@ -228,12 +253,12 @@ Bug fixes #2798 - Inconsistent logic executed between Record.setValue(Field, T) and BookRecord.setId(Integer) (generated) #2816 - Manual shows wrong DefaultConfiguration constructor call for use with - Spring + Spring #2819 - Invalid SQL rendered for Ingres row value expression predicates #2820 - Invalid SQL rendered for Ingres derived column lists #2825 - IngresDatabase treats unique keys as primary keys #2831 - Bad Javadoc formatting on MySQLDSL's and MariaDBDSL's enumType() method -#2835 - UpdatableRecord.store() and DSLContext.executeInsert() show different +#2835 - UpdatableRecord.store() and DSLContext.executeInsert() show different behaviour with respect to NULL value insertion #2842 - Sybase CAST(? AS LONG VARCHAR) must not contain a length #2845 - AbstractStoreQuery.prepare() does not apply RenderKeywordStyle when @@ -276,7 +301,7 @@ Bug fixes #2989 - Inherit complete Record state when calling Record.into(Class) #2994 - Manual Bug: The jOOQ 2.x Table.getFields() method is used, which doesn't - exist + exist #3013 - The Configuration's RecordMapperProvider is not used when mapping UDTRecords #3019 - Bad SQL rendered from HSQLDBDatabase when loading check constraints @@ -294,7 +319,7 @@ Bug fixes Version 3.2.0 - October 9, 2013 ================================================================================ -With the new jOOQ 3.2, apart from introducing great new features, we are +With the new jOOQ 3.2, apart from introducing great new features, we are changing quite a few things on how we operate. At Data Geekery GmbH, we believe in Open Source. But we also believe in the creative power enabled by commercial software. This is why we have chosen to implement a dual-licensing strategy. @@ -340,7 +365,7 @@ Features and improvements dialect #1903 - Duplicate Query construction API between DSLContext and DSL #2010 - Add listener API to Record / UpdatableRecord -#2352 - Enhance to allow for forcing a type upon all columns / +#2352 - Enhance to allow for forcing a type upon all columns / parameters / attributes of a given data type #2542 - Add a Keyword type and DSL.keyword(String) to construct it #2593 - Add Meta.getPrimaryKeys() @@ -348,11 +373,11 @@ Features and improvements #2595 - Add implicit conversions from Scala functions to RecordMapper #2603 - Add flag to code generation configuration to indicate that and shall also match column names -#2606 - Distinguish ORACLE10G, ORACLE11G, ORACLE12C SQLDialects within the +#2606 - Distinguish ORACLE10G, ORACLE11G, ORACLE12C SQLDialects within the ORACLE family #2618 - Document the fact that different packages are generated for different schemas -#2619 - Add an example ExecuteListener to the manual, showing how UPDATE and +#2619 - Add an example ExecuteListener to the manual, showing how UPDATE and DELETE statements without WHERE clause can be aborted #2630 - Add DSL.queryPart(String, Object...) and similar methods to create simple plain SQL query parts @@ -398,9 +423,9 @@ Features and improvements API changes (backwards-compatible) ---------------------------------- #2581 - Deprecate fetchLater() and FutureResult -#2662 - Deprecate the internal method +#2662 - Deprecate the internal method DSLContext.bind(QueryPart, PreparedStatement) -#2719 - Change various method(Collection>) into +#2719 - Change various method(Collection>) into method(Collection>) Bug fixes @@ -411,10 +436,10 @@ Bug fixes plain SQL #2580 - Bad SQL rendered when combining DISTINCT with LIMIT .. OFFSET in DB2, SQL Server -#2584 - ORA-00904: "SYS"."ALL_PROCEDURES"."OBJECT_TYPE": invalid identifier when +#2584 - ORA-00904: "SYS"."ALL_PROCEDURES"."OBJECT_TYPE": invalid identifier when running code generation with Oracle 10gR1 #2586 - Bad SQL dialect referenced from ASE's and CUBRID's package-info.java -#2591 - Result.intoGroups() and similar methods create key Records with +#2591 - Result.intoGroups() and similar methods create key Records with changed=true #2592 - Qualified names created using DSL.name(String...) should not render null or empty string parts @@ -429,7 +454,7 @@ Bug fixes upper-case SQL keywords #2643 - Routine.execute(Configuration) should restore the original routine state after execution -#2681 - "Type NULL is not supported in dialect MYSQL" when calling +#2681 - "Type NULL is not supported in dialect MYSQL" when calling Meta.getTables() with MySQL or MariaDB JDBC drivers #2690 - Inaccurate runtime xsd versions in 3.1 manual #2703 - SQLDialect.getNameLC() and getNameUC() are not NPE-safe @@ -472,7 +497,7 @@ same vendors with only subtle differences. POJO mapping is taken to the next level. jOOQ opened up its internal DefaultRecordMapper providing useful Record to POJO mapping algorithms. But your custom domain model might be more complex. Instead of creating the next -impedance mismatch, trying to foresee your own mapping algorithm needs, jOOQ +impedance mismatch, trying to foresee your own mapping algorithm needs, jOOQ allows you to inject a RecordMapperProvider into your Configuration, allowing to override record mapping with arbitrary behaviour. @@ -489,7 +514,7 @@ Features and improvements ------------------------- #552 - Add SQLDialect.family() to group several SQLDialect versions of the same RDBMS -#742 - Improve MySQL Stored Procedure support using MySQL 5.5's +#742 - Improve MySQL Stored Procedure support using MySQL 5.5's INFORMATION_SCHEMA.PARAMETERS dictionary table #833 - Add integration tests for both jconn3 and jTDS JDBC drivers for Sybase and SQL Server @@ -508,18 +533,18 @@ Features and improvements #2236 - Add DSLContext.batch(String...) and batch(String, Object[]...) to easily create batch statements from SQL strings #2291 - Add DSLContext.fetchAny(Table, Condition) method and others -#2299 - Allow for setting ResultSet flags (e.g. - ResultSet.TYPE_SCROLL_INSENSITIVE through - ResultQuery.resultSetConcurrency(), resultSetType(), +#2299 - Allow for setting ResultSet flags (e.g. + ResultSet.TYPE_SCROLL_INSENSITIVE through + ResultQuery.resultSetConcurrency(), resultSetType(), resultSetHoldability() -#2310 - Add DSL.using(Connection) and DSL.using(Connection, Settings) which +#2310 - Add DSL.using(Connection) and DSL.using(Connection, Settings) which auto-detect the SQLDialect from the jdbc url #2311 - Add Configuration.recordMapperProvider() to override jOOQ's internal default ReflectionMapper #2339 - Support CUBRID 9.1's new features -#2344 - Add a new ControlFlowSignal that is used to explicitly jump out of a +#2344 - Add a new ControlFlowSignal that is used to explicitly jump out of a control flow -#2355 - Add support for Postgres / HSQLDB's TRUNCATE [...] RESTART / CONTINUE +#2355 - Add support for Postgres / HSQLDB's TRUNCATE [...] RESTART / CONTINUE IDENTITY #2357 - Add support for Postgres' TRUNCATE [...] CASCADE statement #2395 - Simulate row value expression IN predicate using EXISTS @@ -530,14 +555,14 @@ Features and improvements #2424 - Integration-test jOOQ with the SQLite xerial driver #2426 - Add DSLContext.batch(Query, Object[]...) as a convenience for calling batch(Query).bind(Object...).bind(Object...) -#2427 - Add more Javadoc to ResultQuery.fetchResultSet() explaining that +#2427 - Add more Javadoc to ResultQuery.fetchResultSet() explaining that underlying PreparedStatements are closed with ResultSet.close() #2428 - Simulate row value expression comparison predicates using EXISTS #2430 - Add CustomQueryPart for use with plain SQL and other places -#2434 - Add Field.compare(Comparator, Select) and Field.compare(Comparator, +#2434 - Add Field.compare(Comparator, Select) and Field.compare(Comparator, QuantifiedSelect) to allow for more dynamic SQL -#2437 - Add RenderContext.paramType() and deprecate RenderContext.inline() and - .namedParams() +#2437 - Add RenderContext.paramType() and deprecate RenderContext.inline() and + .namedParams() #2440 - Expose the DataSource contained in the DataSourceConnectionProvider #2441 - Add DSL.cast(Field, XXX) for increased API consistency #2446 - Add JDBCUtils.dialect(Connection) to "guess" the jOOQ SQLDialect from a @@ -548,8 +573,8 @@ Features and improvements #2496 - Add support for SQL Server 2012 sequences #2499 - Add JDBCUtils.safeClose(Connection) #2509 - Expose CHECK constraints in jOOQ-meta -#2519 - Add Record.from(Object, Field...) from(Object, String...), - from(Object, int...) to copy only a select set of values from a POJO, +#2519 - Add Record.from(Object, Field...) from(Object, String...), + from(Object, int...) to copy only a select set of values from a POJO, Array, Map #2521 - Add {Row|Record}.fields(Field...), {Row|Record}.fields(String...), {Row|Record}.fields(int...) to extract Field[] from a row or record @@ -565,7 +590,7 @@ Features and improvements API changes (backwards-incompatible) ------------------------------------ -#2468 - API bug: MergeNotMatchedSetStep.set(Field, Select) returns +#2468 - API bug: MergeNotMatchedSetStep.set(Field, Select) returns MergeMatchedSetMoreStep instead of MergeNotMatchedSetMoreStep Bug fixes @@ -574,7 +599,7 @@ Bug fixes 999, 2100 or 2000 maximum bind values per query #2135 - Postgres ENUM data type isn't supported correctly, if the ENUM needs full qualification -#2323 - NullPointerException when calling Schema.getTables() on a meta schema +#2323 - NullPointerException when calling Schema.getTables() on a meta schema with SQLite #2401 - Bad package name generated when contents are not trimmed #2404 - Cannot combine with if both match @@ -599,7 +624,7 @@ Bug fixes #2477 - MySQL's unsigned types cannot be used in other dialects #2478 - IngresDatabase erroneously joins IIINDEXES to get constraint columns, rather than using IIKEYS -#2494 - Possible null pointer passed to ConnectionProvider.release() +#2494 - Possible null pointer passed to ConnectionProvider.release() #2502 - Code generation fails to generate valid java for stored procedures that accept parameters named configuration. #2506 - SQLDialectNotSupportedException on DSL.inline(T, Class), when jOOQ's @@ -609,7 +634,7 @@ Bug fixes #2523 - Statement.close() may be called upon previously closed statements #2528 - Combining renderFormatted with inlined bind variables will change bind$ values when they contain newlines -#2562 - Bad SQLDialect reference in Oracle and MySQL package-info.java +#2562 - Bad SQLDialect reference in Oracle and MySQL package-info.java #2569 - Error when rendering SQL Server procedures with Settings.renderSchema == false @@ -619,7 +644,7 @@ Version 3.0.0 - April 28, 2013 This major release is a great move towards better integration of SQL as a language in Java. Unlike any other database abstraction framework, jOOQ now formally supports the notion of "row value expressions". The jOOQ API uses -Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to +Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to bring you even more compile-time typesafety on a record-level. In SQL, you can typesafely write @@ -691,7 +716,7 @@ This Record typesafety is applied to - Generated records - The new VALUES() constructor - Scala integration for conversion of jOOQ Record[N] to Scala's Tuple[N] - + Apart from this major improvement, there had been many minor changes throughout the jOOQ API. Here are some important ones: @@ -709,8 +734,8 @@ the jOOQ API. Here are some important ones: application built on top of jOOQ. - A VALUES() constructor is now supported, and derived column lists to alias tables and columns in one go. -- The data type API has been greatly simplified. This allowed for the - introduction of runtime precision, scale, and length information. +- The data type API has been greatly simplified. This allowed for the + introduction of runtime precision, scale, and length information. - CRUD has been improved through many more CRUD batch operations, explicit INSERT and UPDATE (in addition to store()), and explicit handling of jOOQ's internal changed flags. @@ -737,7 +762,7 @@ Features and improvements Bug fixes --------- -#1998 - Wrong screenshots in the manual's section about code generation. +#1998 - Wrong screenshots in the manual's section about code generation. jooq-meta.jar is missing #2407 - Fix bad references to pre-3.0 Factory in Javadoc @@ -747,7 +772,7 @@ Version 3.0.0 (RC3) - April 12, 2013 This major release is a great move towards better integration of SQL as a language in Java. Unlike any other database abstraction framework, jOOQ now formally supports the notion of "row value expressions". The jOOQ API uses -Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to +Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to bring you even more compile-time typesafety on a record-level. See release 3.0.0 for more information. @@ -755,7 +780,7 @@ See release 3.0.0 for more information. Features and improvements ------------------------- #2195 - Remove the standalone tutorial, link to the manual -#2321 - Implement various Key.toString() methods +#2321 - Implement various Key.toString() methods #2329 - Add Javadoc to Configuration.executeListenerProviders() #2331 - Add hint to the manual about mvn eclipse:clean and eclipse:eclipse when building jOOQ @@ -767,9 +792,9 @@ Features and improvements #2389 - Make org.jooq.impl.DefaultConfiguration public #2392 - Add Configuration.set() methods. They should allow for modifying a Configuration -#2396 - Add DSL.function(Name, Class, Field...) and - DSL.function(Name, DataType, Field...) to allow for custom, - fully-qualified function references +#2396 - Add DSL.function(Name, Class, Field...) and + DSL.function(Name, DataType, Field...) to allow for custom, + fully-qualified function references API changes (backwards-compatible) ---------------------------------- @@ -789,12 +814,12 @@ API changes (backwards-incompatible) DSL.using() #2380 - Rename org.jooq.impl.Factory to org.jooq.impl.DSL #2382 - Let DAO reference a Configuration instead of a DSLContext -#2388 - Replace Configuration's List with +#2388 - Replace Configuration's List with ExecuteListenerProvider[] to simplify correct and thread-safe client implementations #2390 - Change Configuration API to reflect jOOQ-style getter / setter naming #2391 - Rename dialect-specific Factories [Dialect]Factory to [Dialect]DSL -#2399 - Remove support for the USE statement +#2399 - Remove support for the USE statement Behaviour changes (backwards-incompatible) ------------------------------------------ @@ -803,9 +828,9 @@ Behaviour changes (backwards-incompatible) Bug fixes --------- -#1868 - Cursor.close() doesn't terminate the ExecuteListener life cycle -#2325 - "HsqlException: incompatible data type in conversion" when binding a - UUID[] to an HSQLDB prepared statement +#1868 - Cursor.close() doesn't terminate the ExecuteListener life cycle +#2325 - "HsqlException: incompatible data type in conversion" when binding a + UUID[] to an HSQLDB prepared statement #2327 - Compilation error in generated tables, when a table contains a UNIQUE key but no PRIMARY key #2332 - Documentation example regarding DSL.concat() does not compile @@ -830,14 +855,14 @@ Version 3.0.0 (RC2) - March 8, 2013 This major release is a great move towards better integration of SQL as a language in Java. Unlike any other database abstraction framework, jOOQ now formally supports the notion of "row value expressions". The jOOQ API uses -Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to +Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to bring you even more compile-time typesafety on a record-level. See subsequent release candidates or release 3.0.0 for more information. Features and improvements ------------------------- -#2200 - Add Executor.fetchCount(Select) and Select.fetchCount() to replace +#2200 - Add Executor.fetchCount(Select) and Select.fetchCount() to replace the projection by a COUNT(*) query #2244 - Add section to the manual indicating that the jOOQ generator can only handle schemas of a certain size @@ -862,11 +887,11 @@ Bug fixes --------- #2212 - "code size too large" in generated SchemaImpl, when the number of tables exceeds 15k -#2238 - Code generation runs extremely slow for large schemas (Inefficient +#2238 - Code generation runs extremely slow for large schemas (Inefficient DefaultRelations.getUniqueKeys() and getForeignKeys() methods) -#2239 - Code generation runs extremely slow for large schemas (Inefficient +#2239 - Code generation runs extremely slow for large schemas (Inefficient AbstractDatabase.filterSchema() methods) -#2252 - ArrayIndexOutOfBoundsException, when rendering plain SQL that is +#2252 - ArrayIndexOutOfBoundsException, when rendering plain SQL that is terminated by a comment #2259 - RenderMapping has no effect, if not supplied to the Executor constructor #2262 - RenderSchema has no effect, if not supplied to the Executor constructor @@ -895,7 +920,7 @@ Version 3.0.0 (RC1) - February 16, 2013 This major release is a great move towards better integration of SQL as a language in Java. Unlike any other database abstraction framework, jOOQ now formally supports the notion of "row value expressions". The jOOQ API uses -Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to +Xtend-generated API types from Row1 .. Row22, as well as Record1 .. Record22 to bring you even more compile-time typesafety on a record-level. See subsequent release candidates or release 3.0.0 for more information. @@ -904,14 +929,14 @@ Features and improvements ------------------------- #456 - Add runtime support for PRECISION, SCALE, and LENGTH attributes #834 - Add support for the Firebird / Postgres UPDATE .. RETURNING clause -#915 - Add Table> +#915 - Add Table> Factory.values(Row[N]...), to create ad-hoc tables from data #1038 - Introduce new type GroupField for cube(), rollup() and groupingSets() functions. Accept only GroupField... in groupBy() clauses #1097 - Add org.jooq.Catalog, a type modelling an entity combining several org.jooq.Schema -#1144 - Overload Executor.fetch[One|Lazy](ResultSet, X...) with X being +#1144 - Overload Executor.fetch[One|Lazy](ResultSet, X...) with X being Field, DataType, Class #1178 - Allow for treating Condition as Field #1583 - Add support for row value expressions in UPDATE statements: UPDATE .. @@ -969,31 +994,31 @@ Features and improvements whether a single field's value has changed #1990 - Add T Record.original(Field), original(int), original(String) to get a Field's original value -#1991 - Reflect changed flag in Result.toString() (and thus also +#1991 - Reflect changed flag in Result.toString() (and thus also Record.toString()) -#1999 - Add Record.changed(boolean) changed(Field, boolean) - changed(int, boolean) changed(String, boolean) as setters for the +#1999 - Add Record.changed(boolean) changed(Field, boolean) + changed(int, boolean) changed(String, boolean) as setters for the changed flag -#2000 - Add Record.reset(), reset(Field), reset(int), reset(String) to +#2000 - Add Record.reset(), reset(Field), reset(int), reset(String) to restore original values in a record -#2008 - Add elementFormDefault="qualified" to XSD specifications to allow for +#2008 - Add elementFormDefault="qualified" to XSD specifications to allow for XML validation of jOOQ configuration files #2020 - Let org.jooq.ExecuteListener extend java.util.EventListener -#2021 - Add UpdatableRecord.refresh(Field...) to allow for refreshing a +#2021 - Add UpdatableRecord.refresh(Field...) to allow for refreshing a subset of the Record's values #2027 - Document semantic versioning rules as understood by jOOQ #2028 - Add Batch.size() to indicate the number of queries that will be executed by a batch operation -#2030 - Add reusable wrapper types for JDBC Connection, Statement, ResultSet, +#2030 - Add reusable wrapper types for JDBC Connection, Statement, ResultSet, etc. -#2044 - Add various TableRecord.fetchParent(...), fetchChild(...) and +#2044 - Add various TableRecord.fetchParent(...), fetchChild(...) and fetchChildren(...) methods to follow foreign key relationships #2049 - Add gt() / ge() / lt() / le() to Row[N] types #2052 - Add [not]Between[Symmetric]() to Row[N] types #2053 - Add is[Not]Null() to Row[N] types -#2066 - Add Executor.extractBindValues(QueryPart), extractParams(QueryPart) to +#2066 - Add Executor.extractBindValues(QueryPart), extractParams(QueryPart) to extract bind values in the context of an Executor (i.e. Configuration) -#2072 - Let UDTRecordImpl and ArrayRecordImpl.toString() return a valid +#2072 - Let UDTRecordImpl and ArrayRecordImpl.toString() return a valid constructor expression #2078 - Add Postgres to @Support annotation of SelectForUpdateWaitStep.wait() #2079 - Support generation of bean validation annotations on records and @@ -1007,9 +1032,9 @@ Features and improvements #2113 - Document Record.hashCode() and equals() through Javadoc #2133 - Allow for mapping to "" (empty) in order to avoid the generation of a schema -#2156 - Add Row.type(int), type(String), dataType(int), dataType(String) for +#2156 - Add Row.type(int), type(String), dataType(int), dataType(String) for convenience -#2158 - Add Executor.fetchLazy(Table) and fetchLazy(Table, Condition) for +#2158 - Add Executor.fetchLazy(Table) and fetchLazy(Table, Condition) for convenience #2159 - Let ExecuteListener extend Serializable #2160 - Add Executor.batchUpdate(UpdatableRecord...) to mass-update a set of @@ -1020,30 +1045,30 @@ Features and improvements #2170 - Add 0.0 and 1.0 to Convert.FALSE_VALUES and Convert.TRUE_VALUES #2171 - Allow for converting booleans to numbers through org.jooq.tools.Convert: TRUE => 1, FALSE => 0 -#2172 - Add set(Field, Select>) methods to UPDATE, +#2172 - Add set(Field, Select>) methods to UPDATE, MERGE and INSERT statements #2176 - Add hint in code generation, when an unsupported, old database version is being used (e.g. MS SQL Server 2000) #2177 - Add ResultQuery.intern() and Result.intern() for string interning in result sets #2179 - Add Javadoc to QueryPart.hashCode() and equals() -#2199 - Allow for INSERT and UPDATE of pre-existing records through +#2199 - Allow for INSERT and UPDATE of pre-existing records through SET [ Record ] clauses #2202 - Add Mock JDBC objects for unit testing with jOOQ #2203 - Add Executor.map(Schema) and Executor.map(Table) as a convenience to apply runtime schema mapping #2204 - Add BatchBindStep.bind(Object[][]) to bind lots of bind values at a time -#2205 - Add Result Executor.newResult(Table) to generate custom +#2205 - Add Result Executor.newResult(Table) to generate custom results API changes (backwards-compatible) ---------------------------------- #1309 - Let Factory.val() return Param instead of Field -#2031 - Change union(Select) and similar methods to +#2031 - Change union(Select) and similar methods to union(Select) -#2157 - Change the bounds of various > H +#2157 - Change the bounds of various > H fetchInto(H handler) methods to RecordHandler -#2197 - Relax bounds on Factory.groupingSets(Collection>...) to +#2197 - Relax bounds on Factory.groupingSets(Collection>...) to Collection>... #2206 - Relax bounds of R on Executor.newRecord() from TableRecord to Record @@ -1064,9 +1089,9 @@ API changes (backwards-incompatible) #1887 - Remove all deprecated code #1894 - Remove constructors from dialect-specific factories #1907 - Remove FactoryOperations, push its API down to org.jooq.impl.Executor -#1921 - Add InsertValuesStep[N] +#1921 - Add InsertValuesStep[N] Executor.insertInto(Table, Field, Field, ..., Field) -#1926 - Add MergeXXXStep +#1926 - Add MergeXXXStep Executor.mergeInto(Table, Field, Field, ..., Field) #1977 - Remove the confusing concept of having a "main key" as opposed to a "primary key" @@ -1080,7 +1105,7 @@ API changes (backwards-incompatible) Behaviour changes (backwards-incompatible) ------------------------------------------ #1235 - SQLite BIGINT data type erroneously maps to java.math.BigInteger -#1578 - Change configuration of ExecuteListeners in Configuration. Listeners +#1578 - Change configuration of ExecuteListeners in Configuration. Listeners instances should be provided, not classes #2076 - Stop "supporting" comma-separated regular expressions in the code generator configuration @@ -1091,7 +1116,7 @@ Bug fixes #1170 - Improve performance on jOOQ's reflection usage #1626 - Explicitly implement hashCode() and equals() in some additional QueryParts -#1886 - Query.bind() has no effect when Query.keepStatement(true) and +#1886 - Query.bind() has no effect when Query.keepStatement(true) and StatementType.STATIC_STATEMENT are combined #1890 - Bad Postgres array serialisation when " or \ characters are contained in a String[] @@ -1109,7 +1134,7 @@ Bug fixes #1979 - Thread safety issue in org.jooq.impl.FieldList #1982 - Change RenderNameStyle.UPPER, LOWER, AS_IS to quote literals if needed #1992 - Bad reference to org.jooq.debug.[impl].DebugListener in the manual -#1993 - Bad code generated when the same table name exists in multiple schemas +#1993 - Bad code generated when the same table name exists in multiple schemas in SQL Server #1995 - Record.original() values aren't updated after a Record.store() operation #1997 - Review the manual's tutorial for integrity @@ -1119,10 +1144,10 @@ Bug fixes #2011 - Implement some micro-optimisations in DefaultRenderContext #2025 - Correctly handle multiple foreign keys defined on the same column #2045 - Bad hashCode calculation when Records contain arrays or byte[] -#2055 - MySQL's UPDATE [t1] JOIN [t2] syntax can cause syntax errors as column +#2055 - MySQL's UPDATE [t1] JOIN [t2] syntax can cause syntax errors as column references are not fully qualified -#2057 - Cannot properly extract bind values for LIMIT .. OFFSET clause from a - SELECT statement +#2057 - Cannot properly extract bind values for LIMIT .. OFFSET clause from a + SELECT statement #2063 - jOOQ-meta loads Firebird composite unique key columns in wrong order #2073 - The code generator's flag doesn't affect Oracle VARRAY and TABLE types @@ -1133,12 +1158,12 @@ Bug fixes #2086 - SQL syntax error when aliasing outcome of a relational division #2091 - CUBRID doesn't really have a NVARCHAR data type #2098 - NullPointerException when org.jooq.impl.EnumConverter converts null -#2104 - SQLite code generation treats multi-column primary keys like multiple +#2104 - SQLite code generation treats multi-column primary keys like multiple single-column unique keys #2108 - SQLite returns NULL for val(new Date(0)).add(-1) and some other date time arithmetic expressions #2128 - Misleading Javadoc in Factory / Executor.selectCount() -#2137 - Failure to assign a value to a record pojo for a column with a +#2137 - Failure to assign a value to a record pojo for a column with a composite type when using select into. #2139 - batchStore with Postgres composite types incorrectly reuses values from the first record. @@ -1148,8 +1173,8 @@ Bug fixes Oracle #2144 - Improve AbstractField.equals() and AbstractTable.equals() and similar, as these two are called very often -#2145 - Improve QueryPartList.removeNulls() as this is called very often -#2154 - Generated Records should access values by index, not by field, for +#2145 - Improve QueryPartList.removeNulls() as this is called very often +#2154 - Generated Records should access values by index, not by field, for performance reasons #2165 - Add H2 database definitions to the jOOQ-scala module (to prevent compilation errors) @@ -1170,7 +1195,7 @@ Bug fixes Version 2.6.0 - October 26, 2012 ================================================================================ -This release has a new main feature: the type-safe support for row value +This release has a new main feature: the type-safe support for row value expressions also known as tuples - up to a degree of 8. The API is formed in a similar way as pre-existing tuple support in languages like C# or Scala. @@ -1178,7 +1203,7 @@ jOOQ's Scala integration has also been improved through the new jOOQ-Scala module, which provides some useful implicit defs for operator overloading. Future versions of jOOQ-Scala may experiment with Scala 2.10's Macros -This release also ships with a lot of new deprecation to help you prepare for +This release also ships with a lot of new deprecation to help you prepare for the upcoming major release. Minor feature improvements include: @@ -1196,76 +1221,76 @@ Features and improvements #1058 - Add Factory.row(T1, T2, .. TN) and Factory.row( Field, Field ... Field) to allow for creating tuples / rows #1077 - Add support for the SQL standard OVERLAPS predicate -#1245 - Improve formatting for DECIMAL data types in Result.format(). Nicely +#1245 - Improve formatting for DECIMAL data types in Result.format(). Nicely align the decimal point and reserve space on both sides #1484 - Let XJC-generated artefacts implement Cloneable -#1527 - Support for converting String to java.net.URL, java.net.URI, and +#1527 - Support for converting String to java.net.URL, java.net.URI, and java.io.File -#1674 - Export data types with Result.formatXML() and Result.formatJSON() +#1674 - Export data types with Result.formatXML() and Result.formatJSON() exports #1679 - Add Factory.table(String, QueryPart...) #1708 - Add Map> ResultQuery.fetchGroups(Field, Class) #1709 - Add Map> ResultQuery.fetchGroups(Field[]) -#1710 - Add Map> +#1710 - Add Map> ResultQuery.fetchGroups(Field[], Class) #1719 - Make logic from ResultQuery.fetchArray() available in Result.intoArray() -#1728 - Add support for the MySQL COUNT(DISTINCT expr, expr...) aggregate +#1728 - Add support for the MySQL COUNT(DISTINCT expr, expr...) aggregate function syntax #1744 - Add support for the CUBRID DECR() function -#1756 - Add RecordMapper, similar to RecordHandler, mapping records to +#1756 - Add RecordMapper, similar to RecordHandler, mapping records to custom types #1762 - Add package-info.java to add Javadoc documentation to all packages #1766 - Simulate row comparisons where they are not supported -#1773 - Add a new jOOQ-Scala project and jooq-scala artefactId, to contain jOOQ +#1773 - Add a new jOOQ-Scala project and jooq-scala artefactId, to contain jOOQ extensions in the Scala language -#1782 - Move JAXB bindings out of XSD, in order to support more advanced +#1782 - Move JAXB bindings out of XSD, in order to support more advanced bindings #1783 - Generate @SuppressWarnings("all") in jOOQ-generated artefacts #1784 - Enhance the BETWEEN predicate, introducing the AND keyword -#1810 - Add Map ResultQuery.fetchMap(Field, Class) and +#1810 - Add Map ResultQuery.fetchMap(Field, Class) and Result.intoMap(Field, Class) #1816 - Add support for materialized views in Oracle's code generator #1828 - Reduce log level for Factory deserialisation to TRACE -#1837 - Add support for @java.beans.ConstructorProperties when fetching into +#1837 - Add support for @java.beans.ConstructorProperties when fetching into immutable POJOs #1841 - Add SortField Field.sort(SortOrder) to allow for dynamic sorting #1842 - Add Condition Field.compare(Comparator, Field) to allow for dynamic comparisons -#1844 - Add Table Table.join(TableLike, JoinType) to allow for +#1844 - Add Table Table.join(TableLike, JoinType) to allow for dynamic joining #1845 - Add Factory.schemaByName(String) for plain SQL schemata -#1848 - Add Record.changed() to indicate whether a Record contains "dirty" +#1848 - Add Record.changed() to indicate whether a Record contains "dirty" values -#1849 - Add Record.original() to obtain the originally fetched values from a +#1849 - Add Record.original() to obtain the originally fetched values from a Record -#1854 - Add ResultQuery.maxRows(int) to limit the number of actually fetched +#1854 - Add ResultQuery.maxRows(int) to limit the number of actually fetched records -#1855 - Add Query.cancel() to support for interrupting statements prematurely -#1856 - Add Query.queryTimeout(int) to support for JDBC's +#1855 - Add Query.cancel() to support for interrupting statements prematurely +#1856 - Add Query.queryTimeout(int) to support for JDBC's Statement.setQueryTimeout() API changes (backwards-compatible) ---------------------------------- #1800 - Deprecate AliasProvider #1807 - Result.intoArray() declares "throws MappingException", which isn't true -#1839 - Deprecate the various Result.getValuesAs[Type] and +#1839 - Deprecate the various Result.getValuesAs[Type] and Record.getValueAs[Type] methods #1840 - Deprecate org.jooq.Store -#1866 - Deprecate [Schema-Name]Factory, remove reference to it from the +#1866 - Deprecate [Schema-Name]Factory, remove reference to it from the tutorials #1869 - Deprecate org.jooq.NamedQueryPart #1870 - Deprecate org.jooq.NamedTypeProviderQueryPart #1872 - Improve jOOQ's RenderContext pretty printing behaviour #1881 - Deprecate ConditionProvider, OrderProvider, LockProvider types - + Bug fixes --------- -#1593 - Factory.field("{1} + {0} + {0}", val(1), val(2)) doesn't work. Cannot +#1593 - Factory.field("{1} + {0} + {0}", val(1), val(2)) doesn't work. Cannot re-use / re-order placeholders -#1720 - Improve performance by using Record.getValue(int) instead of - Record.getValue(Field) internally, where more than one value is +#1720 - Improve performance by using Record.getValue(int) instead of + Record.getValue(Field) internally, where more than one value is retrieved from a record -#1751 - Result.intoResultSet() generates wrong ResultSetMetaData if runtime +#1751 - Result.intoResultSet() generates wrong ResultSetMetaData if runtime schema mapping is applied #1764 - Add missing @Support({ ... FIREBIRD ... }) annotations #1768 - NullPointerException when DAO.fetchOne() returns no record @@ -1273,49 +1298,49 @@ Bug fixes #1786 - Fix SEQUENCE support for Firebird #1791 - Log a table's input/output names, and PK name when generating code #1792 - Factory.fieldByName() and tableByName() do not correctly escape quotes -#1797 - SQL syntax errors when plain SQL contains comments with question marks +#1797 - SQL syntax errors when plain SQL contains comments with question marks and SQL is executed as StatementType.STATIC_STATEMENT -#1802 - Result.into(Table) doesn't work correctly, if the same field name +#1802 - Result.into(Table) doesn't work correctly, if the same field name appears twice in Result -#1806 - Let Record.toString() wrap the record in a temporary Result and call +#1806 - Let Record.toString() wrap the record in a temporary Result and call Result.toString() instead -#1819 - MappingException in Record.into(Class), when POJO setters have +#1819 - MappingException in Record.into(Class), when POJO setters have applicable names but non-applicable argument types #1820 - Cannot fetch into non-public POJO classes. Their members / getters / setters should be made accessible #1829 - Factory.execute(String) may cause errors when plain SQL returns results -#1830 - Allow for passing null or empty arrays to intoMap(Field[]) and +#1830 - Allow for passing null or empty arrays to intoMap(Field[]) and intoGroups(Field[]) -#1850 - Record.equals() returns true as soon as both records hold a "null" value +#1850 - Record.equals() returns true as soon as both records hold a "null" value for a given field -#1860 - Bad Results returned from plain SQL "select *" queries, if several +#1860 - Bad Results returned from plain SQL "select *" queries, if several selected columns share the same name #1876 - NULL constraint violation when storing a copied record Version 2.5.0 - August 26, 2012 ================================================================================ -Welcome to another great database integration in jOOQ: Firebird! This is one of -the more popular open source SQL databases out there, with a rich feature set, +Welcome to another great database integration in jOOQ: Firebird! This is one of +the more popular open source SQL databases out there, with a rich feature set, including the SQL standard MERGE statement. Apart from this, the main new features are: -- Optimistic locking. jOOQ's UpdatableRecord API transparently implements - optimistic locking on its store() and delete() methods. By default, the - in-memory record is compared with the one in the database at write time. But +- Optimistic locking. jOOQ's UpdatableRecord API transparently implements + optimistic locking on its store() and delete() methods. By default, the + in-memory record is compared with the one in the database at write time. But you can also let jOOQ handle incremented VERSION or TIMESTAMP columns for you. -- Oracle feature increment. Many nice Oracle features are now supported: - user-defined aggregates, regular expressions, Oracle Text, CONNECT_BY_ROOT and +- Oracle feature increment. Many nice Oracle features are now supported: + user-defined aggregates, regular expressions, Oracle Text, CONNECT_BY_ROOT and ORDER SIBLINGS BY clausess, partitioned outer joins and more -- jOOQ's convenience API has been greatly enhanced. This includes many improved - fetch methods and new short forms for equal=eq, notEqual=ne, greaterThan=gt, - etc. to better align jOOQ with JPA, XSL, QueryDSL and many other tools that +- jOOQ's convenience API has been greatly enhanced. This includes many improved + fetch methods and new short forms for equal=eq, notEqual=ne, greaterThan=gt, + etc. to better align jOOQ with JPA, XSL, QueryDSL and many other tools that abbreviate these keywords -- Many types and methods have been deprecated to help you foresee the upcoming +- Many types and methods have been deprecated to help you foresee the upcoming changes in jOOQ 3.0 -Please consider also the updated manual with its new, more user-friendly +Please consider also the updated manual with its new, more user-friendly structure Features and improvements @@ -1329,20 +1354,20 @@ Features and improvements #1339 - Add option to generate immutable pojos #1547 - Support "optimistic locking" in UpdatableRecord.store() and delete() #1552 - Generate fetchBy[ColumnName] methods in generated DAO classes -#1553 - Add some Javadoc to document the difference between using a Factory with +#1553 - Add some Javadoc to document the difference between using a Factory with a Connection or with a DataSource #1556 - Add javax.validation API to full deliverable #1565 - Add Factory.connectByRoot(Field) to support the Oracle CONNECT_BY_ROOT pseudo column #1570 - Add Factory.condition(String, QueryPart...) similar to Factory.field(String, QueryPart...) -#1582 - Add support for Oracle's ORDER SIBLINGS BY clause, in combination with +#1582 - Add support for Oracle's ORDER SIBLINGS BY clause, in combination with CONNECT BY #1586 - Add missing constructors taking DataSource to dialect-specific factories -#1587 - Generate missing constructors taking DataSource in schema-specific +#1587 - Generate missing constructors taking DataSource in schema-specific factories #1595 - Simulate REPEAT() in SQLite -#1596 - Add support for optimistic locking using generated information about +#1596 - Add support for optimistic locking using generated information about "timestamp" or "version" columns #1627 - Handle NULL in CSV imports/exports #1645 - Add support for Oracle's PARTITION BY clause in OUTER JOINs @@ -1351,30 +1376,30 @@ Features and improvements #1665 - Add support for the empty GROUP BY () clause #1675 - Add support for the SQL standard IS [NOT] DISTINCT FROM predicate #1680 - Overload all plain SQL DSL methods to also accept QueryPart arguments -#1681 - Simulate empty GROUP BY () clause in Sybase ASE and Ingres, joining a +#1681 - Simulate empty GROUP BY () clause in Sybase ASE and Ingres, joining a dummy table and grouping by a constant field -#1684 - Add Setting to indicate that fetched records shouldn't +#1684 - Add Setting to indicate that fetched records shouldn't be automatically "attached" #1685 - Improve Javadoc of Attachable.attach(). Document how "detaching" works #1688 - Add E Record.into(E) as a complement to E Record.into(Class) -#1692 - Replace Factory.executeInsert(), Factory.executeUpdate() and similar +#1692 - Replace Factory.executeInsert(), Factory.executeUpdate() and similar methods with more succinct variants -#1696 - Add short versions of comparison predicate methods, such as eq, ne, gt, +#1696 - Add short versions of comparison predicate methods, such as eq, ne, gt, ge, lt, le #1698 - Add support for the SQL standard BETWEEN SYMMETRIC predicate #1701 - Add Factory.not(Condition) as a synonym for Condition.not() -#1704 - Document the behaviour of Factory.newRecord(Table, Object) and +#1704 - Document the behaviour of Factory.newRecord(Table, Object) and Record.from(Object) with respect to UpdatableRecord.store() -#1707 - Add Map> ResultQuery.fetchGroups(Field) and +#1707 - Add Map> ResultQuery.fetchGroups(Field) and Result.intoGroups(Field) #1712 - Add > Result.sortAsc .sortDesc(Field) #1713 - Add Result.sortAsc, .sortDesc(Field, Comparator) #1714 - Add Result.sortAsc, .sortDesc(Comparator) -#1718 - Document usage of InvalidResultException on the ResultQuery.fetchXXX() +#1718 - Document usage of InvalidResultException on the ResultQuery.fetchXXX() Javadocs -#1721 - Add Map> ResultQuery.fetchGroups(Field, Field) +#1721 - Add Map> ResultQuery.fetchGroups(Field, Field) and Result.intoGroups(Field, Field) -#1722 - ResultQuery.fetchArray(int) and .fetchArray(String) should return a +#1722 - ResultQuery.fetchArray(int) and .fetchArray(String) should return a typed array, even if this cannot be checked by the compiler #1723 - Add Factory.fetchLazy(ResultSet) @@ -1386,33 +1411,33 @@ API changes (backwards-compatible) #1638 - Deprecate org.jooq.ArrayRecord.createArray() #1639 - Deprecate org.jooq.Adapter #1687 - Let Cursor.fetchInto(Table) return Result instead of List -#1736 - Deprecate TableRecord.{store|refresh|delete}Using() methods as being +#1736 - Deprecate TableRecord.{store|refresh|delete}Using() methods as being part of jOOQ's internal API #1741 - Deprecate org.jooq.MasterDataType Bug fixes --------- -#1572 - Use Thread.currentThread().getContextClassLoader() to load - ExecuteListener classes as a workaround for experienced class loading +#1572 - Use Thread.currentThread().getContextClassLoader() to load + ExecuteListener classes as a workaround for experienced class loading problems when using OSGi #1584 - Code generation error with Oracle UDT static functions -#1632 - Improve the performance of various DefaultRenderContext methods, by +#1632 - Improve the performance of various DefaultRenderContext methods, by locally caching Settings values -#1633 - Improve the performance of CursorImpl.CursorIterator by setting Record +#1633 - Improve the performance of CursorImpl.CursorIterator by setting Record values by index rather than by Field -#1635 - Improve the performance of Factory.fetch(ResultSet) by caching data type +#1635 - Improve the performance of Factory.fetch(ResultSet) by caching data type normalisation regex in FieldTypeHelper #1650 - jOOR Fix #16: Can't call Reflect.create(A, B, null) -#1660 - Factory.renderContext().castMode(CastMode.NEVER).render(query) doesn't +#1660 - Factory.renderContext().castMode(CastMode.NEVER).render(query) doesn't work. CastMode is not applied -#1667 - Bad variable binding when NULLS FIRST, NULLS LAST is simulated in SQL +#1667 - Bad variable binding when NULLS FIRST, NULLS LAST is simulated in SQL Server and other databases -#1673 - Result.formatXML() and Result.intoXML() do not render namespaces +#1673 - Result.formatXML() and Result.intoXML() do not render namespaces correctly #1683 - Oracle code generation regression for 10g. No such column ALL_PROCEDURES.OBJECT_ID #1693 - Cannot bind UDT values from other schemata to stored procedures -#1730 - Compilation errors in SQLite generated code when flag +#1730 - Compilation errors in SQLite generated code when flag is set to true Version 2.4.0 - July 8, 2012 @@ -3647,8 +3672,8 @@ Bugfixes Version 1.5.5.1 - March 13, 2011 ================================================================================ -In version 1.5.5, there was a fatal bug breaking Derby source code generation. -Only the Derby dialect is affected. Please update immediately, if you are using +In version 1.5.5, there was a fatal bug breaking Derby source code generation. +Only the Derby dialect is affected. Please update immediately, if you are using jOOQ's Derby integration Bugfixes @@ -3659,7 +3684,7 @@ Bugfixes Version 1.5.5 - March 12, 2011 ================================================================================ -This version is released early as there are some important bugfixes. Additional +This version is released early as there are some important bugfixes. Additional improvements include: - Improved DSL related to conditions in HAVING and JOIN clauses @@ -3685,31 +3710,31 @@ Bugfixes #300 - Added integration tests for nested selects in JOIN clause #303 - Javadoc correction #307 - Accelerated integration tests -#309 - Fixed JDBC variable binding issue related to Conditions where the lhs is +#309 - Fixed JDBC variable binding issue related to Conditions where the lhs is a function (e.g. stored function) and the rhs is a constant -#310 - Fixed issue where fetchOne() methods throw NullPointerException if no +#310 - Fixed issue where fetchOne() methods throw NullPointerException if no result record is available -#312 - Fixed issue where Field.equal(...) methods rendered unexpected SQL when +#312 - Fixed issue where Field.equal(...) methods rendered unexpected SQL when rhs null is cast to a type #313 - Fixed Derby cast type for VARCHAR -#304 - Let the DerbyDataType default for java.lang.String be VARCHAR, not LONG +#304 - Let the DerbyDataType default for java.lang.String be VARCHAR, not LONG VARCHAR Version 1.5.4 - March 04, 2011 ================================================================================ -Feature #243 required a minor API change in the base classes of generated source -code. This means you have to re-generate all your jOOQ artifacts in order to -migrate to 1.5.4. The artifacts themselves should be regenerated in a compatible +Feature #243 required a minor API change in the base classes of generated source +code. This means you have to re-generate all your jOOQ artifacts in order to +migrate to 1.5.4. The artifacts themselves should be regenerated in a compatible way, such that your client code should not be affected. If this is not the case, please report a ticket here: https://sourceforge.net/apps/trac/jooq/newticket -Apart from the Derby RDMBS and some new data type support, there have been many -new convenience methods added all over the API. For instance, if type-safety is -not really a requirement, there are lots of possibilities to use plain SQL -directly in the DSL. In that case, data can be accessed from Record, Results, +Apart from the Derby RDMBS and some new data type support, there have been many +new convenience methods added all over the API. For instance, if type-safety is +not really a requirement, there are lots of possibilities to use plain SQL +directly in the DSL. In that case, data can be accessed from Record, Results, not only through Field, but also through field names or indexes. Check out the updated documentation (soon) here: @@ -3741,10 +3766,10 @@ Features #256 - Add Oracle support for VARRAY types #257 - Integrate ARRAY types with stored procedures #261 - Add a global type mapping to the generated Schema object -#267 - Add DataTypeDefinition for further abstraction of data types in code +#267 - Add DataTypeDefinition for further abstraction of data types in code generation #269 - Add H2 support for ARRAY types -#290 - If log4j is not on the classpath, use java.util.logging instead, as +#290 - If log4j is not on the classpath, use java.util.logging instead, as fallback API Changes @@ -3753,9 +3778,9 @@ API Changes #218 - Corrected bad method signature: Record.getValueAsLong(Field, Integer) #219 - Extended Result and Select API's to be more similar to that of Record #232 - Add more convenience plain SQL support to the API -#235 - Add convenience methods to Record, Result and Select for access of data +#235 - Add convenience methods to Record, Result and Select for access of data via field name -#243 - Refactor DataType implementations in order to allow for the use of +#243 - Refactor DataType implementations in order to allow for the use of generics #259 - Add field type to database meta data (ColumnDefinition) #260 - Add field type to database meta data (Field) @@ -3766,37 +3791,37 @@ Bugfixes -------- #125 - Add more plain SQL integration tests #191 - Add more integration tests for nested unions -#205 - Implemented workaround for handling Postgres stored functions with UDT +#205 - Implemented workaround for handling Postgres stored functions with UDT OUT parameters -#214 - Fixed NPE when generating a stored function with an unknown parameter +#214 - Fixed NPE when generating a stored function with an unknown parameter type #216 - Fixed some cases where binding of BigInteger is not done correctly #220 - Syntax error when using select statement in a CASE clause #221 - Corrected integration tests for combined update and select statements -#222 - Added integration test for INSERT statements having nested SELECT +#222 - Added integration test for INSERT statements having nested SELECT statements for their fields #225 - Correctly cast array types in Postgres #230 - Potential misuse of Blob and Clob in H2's JDBC types #239 - Factory.fetchAny() is not implemented for SQLite -#244 - Fixed peculiar MySQL casting support where cast types do not match any +#244 - Fixed peculiar MySQL casting support where cast types do not match any data types #245 - Fixed NPE when reading null dates in SQLite #249 - Added ARRAY type integration tests #255 - Stored procedure bind variables get mixed up when any argument is null #263 - Correctly handle Postgres function overloading -#264 - Ambiguous funciton calls when calling overloaded functions with null +#264 - Ambiguous funciton calls when calling overloaded functions with null parameter -#281 - Handle compilation errors when generating stored procedures with > 254 +#281 - Handle compilation errors when generating stored procedures with > 254 parameters -#283 - Fixed compilation errors in generated source code for Oracle's UDT table +#283 - Fixed compilation errors in generated source code for Oracle's UDT table type -#284 - Fixed compilation errors in generated source code for Oracle procedures +#284 - Fixed compilation errors in generated source code for Oracle procedures in packages, when they have no parameters -#285 - Fixed compilation errors in generated source code for Oracle tables with +#285 - Fixed compilation errors in generated source code for Oracle tables with the same name in different schemata #286 - Fixed name collisions in generated objects with the java.lang.* package #288 - Prevent the creation of UNION queries with bad syntax in MySQL -#289 - Correctly alias fields within UNION queries for some dialects, which then +#289 - Correctly alias fields within UNION queries for some dialects, which then only require the "AS" keyword #291 - Cannot create an aliased field called "year" in Postgres @@ -3924,7 +3949,7 @@ Features #60 - Added support for nested selects in INSERT and UPDATE statements #83 - Added log4j logging to code generation and runtime #87 - Add support for arithmetic expressions -#105 - Added support for ENUM data types, where applicable (MySQL and PostgreSQL +#105 - Added support for ENUM data types, where applicable (MySQL and PostgreSQL so far) #110 - Added execute and fetch convenience methods #111 - Added missing "select distinct" support @@ -3947,11 +3972,11 @@ API changes Bugfixes -------- -#109 - Error when executing select * if generated schema does not match actual +#109 - Error when executing select * if generated schema does not match actual schema #115 - Fix various "null" pseudo field issues #126 - Error when selecting a single field from a union nested select -#129 - Fixed performance issue in Oracle code generation for very large +#129 - Fixed performance issue in Oracle code generation for very large databases @@ -3973,9 +3998,9 @@ Some more bugfixes Bugfixes -------- -#71 - Generated code does not compile, when foreign key and primary key have a +#71 - Generated code does not compile, when foreign key and primary key have a data type mismatch -#73 - In Oracle generated code, multi-field foreign keys may generated bad +#73 - In Oracle generated code, multi-field foreign keys may generated bad relations code #82 - Conversion of literals to camelcase fails if numbers are involved @@ -3996,9 +4021,9 @@ API changes Bugfixes -------- -#64 - Code generation fails when foreign key references a unique key that is not +#64 - Code generation fails when foreign key references a unique key that is not the primary key. Code generation for these cases is omitted -#67 - When loading properties files, a leading / seems to be mandatory. This is +#67 - When loading properties files, a leading / seems to be mandatory. This is preventing users from correctly setting up jOOQ the first time #70 - Add support for Oracle datatype TIMESTAMP(6) #72 - Name clashes in generated Tables @@ -4029,20 +4054,20 @@ Features #14 - Add PostGreSQL support #40 - Resolve foreign keys. Allow for navigation between objects. #42 - Add PlainSQLField -#45 - Add "dirty" flag to Record's values. This allows for updating only +#45 - Add "dirty" flag to Record's values. This allows for updating only relevant data. #47 - Complete implementation for UPDATE, INSERT, DELETE statements. Added some missing functionality. #48 - Add more support for Date, Time, Timestamp fields. -#51 - Add a org.jooq.impl.Manager class that provides common utility methods for +#51 - Add a org.jooq.impl.Manager class that provides common utility methods for CRUD operations API changes ----------- -#10 - Add second generic type . This is a prerequisite for +#10 - Add second generic type . This is a prerequisite for many OR-mapping features #18 - Use org.jooq.Record in InsertQuery and UpdateQuery -#46 - Create UpdatableRecords as a prerequisite for JPA and true OR-mapping. +#46 - Create UpdatableRecords as a prerequisite for JPA and true OR-mapping. These records support store() and delete() methods #52 - Add default constructor in generated Records. #53 - Add refresh functionality to UpdatableRecords. See also #46 @@ -4078,14 +4103,14 @@ API changes Bugfixes -------- #35 - Add unit tests for HSQLDB support -#37 - Syntax error in combined select queries! The usage of combined queries in +#37 - Syntax error in combined select queries! The usage of combined queries in MySQL may still be a bit awkward. Keep an eye out for further fixes #43 - Join with aliased tables doesn't work Version 1.2.0 - August 21, 2010 ================================================================================ -The added Oracle support is now unit tested and more stable. The Oracle NUMBER +The added Oracle support is now unit tested and more stable. The Oracle NUMBER data type is mapped more precisely to Java types. Features @@ -4103,8 +4128,8 @@ Bugfixes Version 1.1.0 - August 17, 2010 ================================================================================ -The main new feature is the Oracle support. Wait for Version 1.1.1 for that -support to be stabilised, as there are no Oracle unit tests running against an +The main new feature is the Oracle support. Wait for Version 1.1.1 for that +support to be stabilised, as there are no Oracle unit tests running against an Oracle database yet. Features @@ -4133,4 +4158,4 @@ Features Version 1.0.0 - August 14, 2010 ================================================================================ -Initial Release \ No newline at end of file +Initial Release