diff --git a/jOOQ-codegen-maven/pom.xml b/jOOQ-codegen-maven/pom.xml index d0a37b7a86..d2f4c24ad3 100644 --- a/jOOQ-codegen-maven/pom.xml +++ b/jOOQ-codegen-maven/pom.xml @@ -6,7 +6,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 org.jooq diff --git a/jOOQ-codegen/pom.xml b/jOOQ-codegen/pom.xml index 2354cc33b1..3455b4f6ed 100644 --- a/jOOQ-codegen/pom.xml +++ b/jOOQ-codegen/pom.xml @@ -7,7 +7,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 org.jooq diff --git a/jOOQ-examples/jOOQ-academy/pom.xml b/jOOQ-examples/jOOQ-academy/pom.xml index 77dd93435d..da299d560e 100644 --- a/jOOQ-examples/jOOQ-academy/pom.xml +++ b/jOOQ-examples/jOOQ-academy/pom.xml @@ -18,7 +18,7 @@ UTF-8 - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 diff --git a/jOOQ-examples/jOOQ-codegen-gradle/build.gradle b/jOOQ-examples/jOOQ-codegen-gradle/build.gradle index c8350eb9ac..f5dc9ae01b 100644 --- a/jOOQ-examples/jOOQ-codegen-gradle/build.gradle +++ b/jOOQ-examples/jOOQ-codegen-gradle/build.gradle @@ -49,7 +49,7 @@ repositories { } dependencies { - compile 'org.jooq:jooq:3.8.0-SNAPSHOT' + compile 'org.jooq:jooq:3.8.0' runtime 'com.h2database:h2:1.4.177' testCompile 'junit:junit:4.11' @@ -62,7 +62,7 @@ buildscript { } dependencies { - classpath 'org.jooq:jooq-codegen:3.8.0-SNAPSHOT' + classpath 'org.jooq:jooq-codegen:3.8.0' classpath 'com.h2database:h2:1.4.177' } } diff --git a/jOOQ-examples/jOOQ-flyway-example/pom.xml b/jOOQ-examples/jOOQ-flyway-example/pom.xml index 612406e0cc..7674f43d0f 100644 --- a/jOOQ-examples/jOOQ-flyway-example/pom.xml +++ b/jOOQ-examples/jOOQ-flyway-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 3.2.6.RELEASE - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 jdbc:h2:~/flyway-test diff --git a/jOOQ-examples/jOOQ-javaee-example/pom.xml b/jOOQ-examples/jOOQ-javaee-example/pom.xml index 9935043f3d..d5b2905f6e 100644 --- a/jOOQ-examples/jOOQ-javaee-example/pom.xml +++ b/jOOQ-examples/jOOQ-javaee-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 - 3.8.0-SNAPSHOT + 3.8.0 1.3.173 1.8 diff --git a/jOOQ-examples/jOOQ-javafx-example/pom.xml b/jOOQ-examples/jOOQ-javafx-example/pom.xml index 1346fddbbf..0a7e04e3a2 100644 --- a/jOOQ-examples/jOOQ-javafx-example/pom.xml +++ b/jOOQ-examples/jOOQ-javafx-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 3.2.6.RELEASE - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 diff --git a/jOOQ-examples/jOOQ-jax-rs-example/pom.xml b/jOOQ-examples/jOOQ-jax-rs-example/pom.xml index ae856b997e..ae27c42770 100644 --- a/jOOQ-examples/jOOQ-jax-rs-example/pom.xml +++ b/jOOQ-examples/jOOQ-jax-rs-example/pom.xml @@ -10,7 +10,7 @@ 1.0 - 3.8.0-SNAPSHOT + 3.8.0 diff --git a/jOOQ-examples/jOOQ-kotlin-example/pom.xml b/jOOQ-examples/jOOQ-kotlin-example/pom.xml index d83aa4b464..ffeb0b56f1 100644 --- a/jOOQ-examples/jOOQ-kotlin-example/pom.xml +++ b/jOOQ-examples/jOOQ-kotlin-example/pom.xml @@ -20,7 +20,7 @@ UTF-8 1.0.0-rc-1036 - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 1.8 diff --git a/jOOQ-examples/jOOQ-nashorn-example/pom.xml b/jOOQ-examples/jOOQ-nashorn-example/pom.xml index 3ac0a2d5f5..7803279567 100644 --- a/jOOQ-examples/jOOQ-nashorn-example/pom.xml +++ b/jOOQ-examples/jOOQ-nashorn-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 3.2.6.RELEASE - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 diff --git a/jOOQ-examples/jOOQ-oracle-example/pom.xml b/jOOQ-examples/jOOQ-oracle-example/pom.xml index 7d562f8f63..d87649d6d7 100644 --- a/jOOQ-examples/jOOQ-oracle-example/pom.xml +++ b/jOOQ-examples/jOOQ-oracle-example/pom.xml @@ -18,7 +18,7 @@ UTF-8 - 3.8.0-SNAPSHOT + 3.8.0 11 diff --git a/jOOQ-examples/jOOQ-spark-example/pom.xml b/jOOQ-examples/jOOQ-spark-example/pom.xml index 2d9c49fab4..aeabf2d334 100644 --- a/jOOQ-examples/jOOQ-spark-example/pom.xml +++ b/jOOQ-examples/jOOQ-spark-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 3.2.6.RELEASE - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 diff --git a/jOOQ-examples/jOOQ-spring-boot-example/pom.xml b/jOOQ-examples/jOOQ-spring-boot-example/pom.xml index 53aa25dfc3..e962d5653e 100644 --- a/jOOQ-examples/jOOQ-spring-boot-example/pom.xml +++ b/jOOQ-examples/jOOQ-spring-boot-example/pom.xml @@ -26,7 +26,7 @@ UTF-8 org.jooq.example.spring.Application - 3.8.0-SNAPSHOT + 3.8.0 1.8 diff --git a/jOOQ-examples/jOOQ-spring-example/pom.xml b/jOOQ-examples/jOOQ-spring-example/pom.xml index 52edff6d30..42ae2b6981 100644 --- a/jOOQ-examples/jOOQ-spring-example/pom.xml +++ b/jOOQ-examples/jOOQ-spring-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 4.2.4.RELEASE - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 1.8 diff --git a/jOOQ-examples/jOOQ-spring-guice-example/pom.xml b/jOOQ-examples/jOOQ-spring-guice-example/pom.xml index 84b79b3892..eb1730ade2 100644 --- a/jOOQ-examples/jOOQ-spring-guice-example/pom.xml +++ b/jOOQ-examples/jOOQ-spring-guice-example/pom.xml @@ -19,7 +19,7 @@ UTF-8 4.2.4.RELEASE - 3.8.0-SNAPSHOT + 3.8.0 1.4.181 diff --git a/jOOQ-meta-extensions/pom.xml b/jOOQ-meta-extensions/pom.xml index 75e1893d19..e39fc6ba2c 100644 --- a/jOOQ-meta-extensions/pom.xml +++ b/jOOQ-meta-extensions/pom.xml @@ -6,7 +6,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 org.jooq diff --git a/jOOQ-meta/pom.xml b/jOOQ-meta/pom.xml index d36f7a3b61..a5621faec6 100644 --- a/jOOQ-meta/pom.xml +++ b/jOOQ-meta/pom.xml @@ -6,7 +6,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 org.jooq diff --git a/jOOQ-release/build.xml b/jOOQ-release/build.xml index e05a16aa6a..c255860a44 100644 --- a/jOOQ-release/build.xml +++ b/jOOQ-release/build.xml @@ -3,7 +3,7 @@ - + diff --git a/jOOQ-release/release/template/RELEASENOTES.txt b/jOOQ-release/release/template/RELEASENOTES.txt index 6aff64930a..829e8de49f 100644 --- a/jOOQ-release/release/template/RELEASENOTES.txt +++ b/jOOQ-release/release/template/RELEASENOTES.txt @@ -10,100 +10,281 @@ http://www.jooq.org/notes For a text version, see http://www.jooq.org/inc/RELEASENOTES.txt -Version 3.7.3 - March 01, 2016 + + +Version 3.8.0 - May 03, 2016 ================================================================================ -This is a patch release with some useful fixes for the 3.7 branch +Version 3.8 is a collection of very useful little features and improvements that +have been sitting on our roadmap for a long time: + +More Java 8 and asynchronicity support: +--------------------------------------- + +One of Java 8's interesting new features is the monadic support for asynchronous +operation composition: CompletionStage. jOOQ now features a variety of methods +like DSLContext.transactionAsync(), ResultQuery.fetchAsync(), +Query.executeAsync(), but also DBMS_AQ.dequeueAsync(), which allow for +leveraging this new Java 8 API. In order to inject custom Executors into jOOQ, a +new ExecutorProvider SPI has been added, defaulting to an implementation that +uses the ForkJoinPool. + +Kotlin integration: +------------------- + +While we were working on jOOQ 3.8, Kotlin 1.0 was released, a very exciting new +JVM language by JetBrains. We've started experimenting with the jOOQ / Kotlin +integration, and we've already added new methods to leverage Kotlin's syntax +sugar: Record.get() and Record.set() (as synonmys for getValue() and setValue()) + +With these new methods, it is possible to use Kotlin's square bracket syntax to +access and modify fields in a record: + +
+val rec = fetchOne(BOOK);
+println(rec[BOOK.TITLE]);
+rec[BOOK.TITLE] = "10 SQL Tricks";
+
+ +Stay tuned for more exciting Kotlin integration features in the near future! + +The SQL Catalog type: +--------------------- + +Most databases group objects in three hierarchy levels: + +- Catalogs, which have several... +- Schemas, which have several... +- Tables (and other objects) + +Specifically, in SQL Server, it is possible to select data from objects across +several catalogs. jOOQ 3.8 finally formally supports the org.jooq.Catalog type +both in the code generator as well as in the runtime. + +New DDL features: +----------------- + +Schema migrations and initial database setups become an increasingly useful +feature for many jOOQ users. In each release, we're adding support for +additional statements and clauses of existing statements. jOOQ 3.8 now supports: + +- DEFAULT column values in CREATE TABLE or ALTER TABLE statements +- IF EXISTS in DROP statements +- IF NOT EXISTS in CREATE statements +- ALTER TABLE .. { RENAME | RENAME COLUMN | RENAME CONSTRAINT } statements + +In addition to the above statements, we now allow for generating a set of DDL +commands from a Schema or Table reference. This is very useful e.g. to recreate +an Oracle schema on an H2 in-memory test database. + +Code generator improvements: +---------------------------- + +Among many other improvements, we've simplified data type conversion and binding +configurations. This essentially means: Much less XML for the same feature set! + +Also, we've added additional flags that help maintaining more fine-grained +control over which artefacts you really want to generate. + +General notes: +-------------- + +We have once more postponed thorough JSR 310 (java.time) API support. This +feature addition is one of our users' most wanted. We're aware of this and sorry +we still couldn't deliver it. The risks of getting things wrong in terms of +backwards-compatibility are high, and we don't want to get this wrong. + +We have changed some internals, which may affect those of you who heavily extend +jOOQ. In particular, the deprecated QueryPartInternal.toSQL() and bind() are no +longer overridable. Please move your implementation to the accept() method, +which was added in jOOQ 3.4. Our main benefit from this incompatible change is a +substantial performance improvement, as we can now traverse the jOOQ QueryPart +expression tree only once in order to collect the SQL string and the bind +variables, which leads to a roughly 40% faster SQL rendering in benchmarks! + +All in all, this is an exciting and big new release with tons of little new +features that you won't want to miss once you have upgraded! Details below. + +Enjoy! + + Features and Improvements ------------------------- -#4864 - Relax API contracts on DAOImpl by removing final keyword on methods -#4894 - Update copyright to 2016 -#5047 - Issue a warning when Record.field(String) runs into ambiguous columns -#5048 - Add support for CREATE TEMPORARY TABLE also in MySQL / MariaDB -#5119 - Log error in JDBCUtils.safeFree() methods, in case of ignored exception -#5125 - Improve Javadoc for Loader.loadArrays() -Deprecation ------------ -#4860 - Deprecate LoaderJSONOptionsStep.ignoreRows() - -Bug Fixes ---------- -#4844 - Missing @Support annotations for Vertica and window functions -#4850 - Wrong emulation of SINH() and other hyperbolic functions for Vertica -#4852 - Wrong emulation of bitwise XOR for Vertica -#4871 - SQLDialect.POSTGRES_x_x Javadoc is wrong -#4881 - Escaped block comment inside of Scaladoc causes compilation error -#4911 - Bad SQL generated for CREATE TABLE AS SELECT .. FROM (SELECT ..) in SQL Server -#4923 - A negligible amount of CPU is spent in String.indexOf() because of identifier escaping -#4927 - A small amount of CPU time is wasted on Operator.name().toLowerCase() -#4942 - Convert.convert(long, Instant.class) shouldn't pass by LocalDateTime -#4948 - SQLFeatureNotSupportedException thrown in some (unsupported) SQLDialects when initalizing MetaDataFieldProvider -#4958 - ClassCastException when applying schema mapping on procedures and types in Oracle -#4961 - NullPointerException in ArrayRecord.toString() when ArrayRecord is not attached -#4971 - PostgreSQL code generation does not stably order overloaded routines -#4975 - Generated functions without parameter names produce malformed SQL -#4978 - HSQLDB does not support bind variables in DDL statements -#4982 - Wrong SQL generated for CREATE TABLE .. AS SELECT in HSQLDB -#4986 - Utils.executeImmediate() doesn't work when inlined SQL contains apostrophes -#4993 - Support for emulating VALUES clauses in H2 is inefficient -#5005 - Misleading Javadoc on DSL.table(String) -#5018 - NullPointerException when using MockConnection with DSLContext.transaction() -#5025 - Wrong implementation of internal SortFieldList.nulls() -#5029 - Slow routine overload index calculation in PostgreSQL's code generator -#5035 - Standalone calls to Oracle pipelined functions aren't possible -#5043 - Record[N].values(T1, T2, ..., TN) is not implemented -#5052 - TableAlias does not delegate getIdentity(), getPrimaryKey(), getKeys(), getRecordVersion(), getRecordTimestamp() calls to aliased table -#5071 - SQL Server 2008 SELECT DISTINCT .. LIMIT .. OFFSET emulation does not keep ORDER BY semantics in complex queries -#5074 - ClassCastException when using DSL.any() in a Condition Field -#5090 - Bad deserialisation of PostgreSQL UDTs that contain boolean attributes -#5098 - Table.getPrimaryKey() does not work with SQLite's Xerial JDBC driver, when primary key column contains upper-case characters -#5101 - ScalaGenerator produces an invalid import expression for SQL array types -#5107 - Result.formatXXX() methods should flush Writers to prevent data loss -#5114 - Performance bottleneck in MetaFieldProvider when fetching unknown plain SQL fields - -Version 3.7.2 - December 22, 2015 -================================================================================ - -This is a patch release with some useful fixes for the 3.7 branch - -Features and Improvements -------------------------- -#4812 - Add source code in original form to .zip, such that users can build jOOQ right away -#4816 - Deprecate on(Boolean), where(Boolean), having(Boolean), etc. - -Bug Fixes ---------- -#4709 - Wrong enum type referenced from UDT, when the same enum type exists in different schemas in PostgreSQL -#4713 - Cannot call standalone PostgreSQL function with enum array return type in non-public schema -#4738 - Documentation bug: Deprecation remark on fieldByName(Class, String...) points to wrong substitute -#4757 - Regression in AbstractParam throwing StackOverflowError when calling UDTRecord.toString() -#4766 - org.jooq.Meta must not cache DatabaseMetaData in order not to violate the ConnectionProvider contract -#4774 - Extremely slow mapping Record.into(ProxyableInterface.class) -#4777 - DefaultRecordMapper is not thread safe when mapping proxyable interface -#4786 - OracleDSL.DBMS_AQ.dequeue() does not return any MESSAGE_PROPERTIES_T values -#4803 - Oracle views with dollar sign '$' in them are not generated -#4808 - CREATE VIEW statement fails when it contains bind variables -#4822 - Oracle LONG and LONG RAW columns cause "Stream has already been closed" exception when not placed in first position -#4830 - Generated convenience methods Routines.f() have misleading Javadoc - -Version 3.7.1 - November 12, 2015 -================================================================================ - -This is a patch release with some useful fixes for the 3.7 branch - -Features and Improvements -------------------------- +#1068 - Add integration tests for DSLContext.loadInto() when using only plain SQL objects +#1859 - Add Setting to always fetch all record data after INSERT or UPDATE +#2032 - Add code generation support for the new org.jooq.Catalog type +#2211 - Change Record.getValue() and setValue() to get() and set() +#2438 - Add ParamType Param.paramType() to indicate whether a parameter is INDEXED, NAMED, INLINED +#2928 - Mapping tables based on regular expressions +#3065 - Add performance regression tests #3073 - Distribute commercial jOOQ artifacts under a different groupId to avoid conflicts +#3160 - Add Queries DSLContext.ddl(Schema), ddl(Table) and others to re-generate known artefacts +#3254 - Add support for PostgreSQL materialized views +#3330 - Allow custom quote character/no quote character when exporting to CSV +#3482 - Add flags to the code generator to turn on / off generation for tables, views, packages, procedures, udts, etc. +#3570 - Add KeepNamesGeneratorStrategy to keep generated identifiers as they are in the database +#3691 - Improve API to create CASE expressions with arbitrary numbers of arguments +#3761 - Add code generator configuration to specify a log level threshold +#3852 - Add DataType.defaultValue(Field) to allow for setting DEFAULTs in DDL statements +#3942 - Add support for PostgreSQL functions returning single table records +#4050 - Allow for specifying constraints with CREATE TABLE statements +#4124 - Add as a synonym for in the code generation configuration +#4155 - Add support for PL/SQL BOOLEAN types +#4375 - Add support for CREATE TEMPORARY TABLE also in MySQL / MariaDB +#4435 - Add DSLContext.transactionAsync(TransactionRunnable) and transactionResultAsync(TransactionCallable) +#4480 - Emulate H2's MERGE statement for MySQL, MariaDB, and PostgreSQL 9.5 +#4500 - Add a short section to the manual explaining how to configure jOOQ with JPA or Vertabelo +#4501 - Add .fetch() and .execute() also to historic manual versions +#4517 - Allow to configure the output file encoding in the code generator +#4550 - Add support for property expressions in the code generator's standalone configuration +#4568 - Add support for the PostgreSQL MODE() ordered-set aggregate function +#4598 - Add , , in , to allow for working without +#4619 - Let SQLTable constructor pass SQL string to AbstractTable parent constructor #4620 - Change error message when jOOQ-meta database type could not be found -#4659 - Significant overhead caused by type lookup when using DSL.val(T) or DSL.inline(T) in org.jooq.impl.Limit +#4663 - Add DSL.val(X), value(X), and inline(X) overloads for all common types +#4676 - Add SelectFromStep.from(Name) and similar convenience methods +#4677 - Add type safe overloads DSL.with(String, String, String) that will expect Select> +#4687 - Add ResultQuery.fetchStream() as a alias for stream() +#4688 - Add a Javadoc comment to DataType#convert() linking to Convert#convert() for details +#4693 - Add DSL.toDate(value, format) and DSL.toTimestamp(value, format) +#4696 - Relax API contracts on DAOImpl by removing final keyword on methods +#4715 - Allow to specify the newline character for Result.formatCSV() #4721 - Add Javadoc examples to DSL.using(String), showing proper use with try-with-resources +#4724 - Add Table.eq(Table) and Table.ne(Table) +#4729 - Emulate DSL.count(Table) and countDistinct(Table) for all other dialects +#4730 - Recognise pgjdbc-ng JDBC URL in JDBCUtils.dialect(String) +#4731 - Add Javadoc warning to Table.equals() to help prevent accidental usage +#4735 - Add DSL.condition(Record) for Query By Example (QBE) predicate building support +#4746 - Allow for specifying empty string as formatCSV()'s nullString / emptyString +#4752 - Improve documentation of using jOOQ's code generator with ant +#4753 - Add Settings for default naxRows, fetchSize, queryTimeout and other values +#4756 - Add section to the manual documenting how to include the commercial jOOQ distribution in a Maven build +#4761 - Add MySQL IFNULL() support as a synonym for NVL() +#4763 - Deprecate on(Boolean), where(Boolean), having(Boolean), etc. +#4769 - Improve TableLike.field(Field) Javadoc +#4784 - Add support for OFFSET .. LIMIT in addition to LIMIT .. OFFSET +#4785 - Add support for OFFSET without LIMIT +#4791 - Upgrade scala dependency to 2.10.6 +#4792 - Add Schema.getCatalog() and render the catalog in SQL +#4795 - Add Setting to turn off rendering catalog at runtime +#4796 - Add Context.qualifyCatalog() to allow for locally qualifying names without catalog +#4797 - Document caveat when using Gradle XML Markup generator with some elements +#4799 - Add a note to the manual about the Gradle / Groovy MarkupBuilder caveat related to some elements +#4801 - Add DEQUEUE_OPTIONS_T.wait(int) to support timeout-based waits on Oracle AQ +#4811 - Add source code in original form to .zip, such that users can build jOOQ right away +#4818 - Add org.jooq.CSVFormat: A parameter object to replace the existing formatCSV overloads +#4825 - Add support for Oracle table-valued functions +#4827 - Add CatalogVersionProvider +#4833 - Generate standalone function call for table-valued functions +#4834 - Add Context.declareAliases as a flag to indicate whether alias declaration generating QueryParts are allowed to do so +#4837 - Add DefaultConnectionProvider.setReadOnly() and isReadOnly() +#4838 - Add code generation flag to turn off generation of table-valued functions +#4839 - Rename Generator.fullyQualifiedTypes() to generateFullyQualifiedTypes() for naming consistency +#4841 - Add code generation support for column DEFAULT values +#4842 - Add support for RANGE clause in window functions +#4847 - Improve Javadoc's of Loader API's various fields() methods +#4848 - Add internal API to configure indentation of generated code +#4855 - Remove final keyword on JavaGenerator methods +#4857 - Add a chapter to the manual about in-memory importing +#4858 - Add a section to the manual about importing JSON +#4859 - Deprecate LoaderJSONOptionsStep.ignoreRows() +#4868 - Generate 4 spaces in Java or 2 spaces in Scala instead of tabs in generated code by default +#4869 - Generate schema and catalog references in order to fully qualify tables +#4873 - Add Firebird 3.0 support for MERGE +#4874 - Add Firebird 3.0 support for window functions +#4879 - Add generateGlobalCatalogReferences() and generateGlobalSchemaReferences() flags to code generator +#4889 - Update copyright to 2016 +#4891 - Accept DataSource in GenerationTool, in addition to Connection +#4892 - Add sections to the manual explaining how to use JPADatabase +#4893 - Add a tutorial section to the manual showing how to use jOOQ with Kotlin +#4897 - Add sections to the manual explaining how to use XMLDatabase +#4901 - Add UniqueKey.getName() and ForeignKey.getName(), and generate this info in Keys.java +#4903 - Emulate EVERY() with MAX() rather than with COUNT() +#4904 - Add DataAccessException.sqlStateClass() and sqlStateSubclass() +#4906 - Add manual and Javadoc URL mapping for /current/ = /latest/ +#4907 - Add DSLContext.fetchFromHTML() to convert an HTML table into a jOOQ Result +#4914 - Add support for CREATE UNIQUE INDEX +#4915 - Add UniqueKey.isPrimary() +#4916 - Implement Key.equals() and hashCode() for all Key types +#4918 - Add Key.constraint() and improve Key.toString() accordingly +#4931 - Add a section to the manual explaining the use of dynamic SQL +#4936 - Add support for CREATE TABLE IF NOT EXISTS +#4952 - Add flag to turn off generation of database links +#4954 - Add flag to turn off generation of queues +#4967 - Add support for CREATE VIEW IF NOT EXISTS +#4968 - Add support for CREATE [ UNIQUE ] INDEX IF NOT EXISTS +#4969 - Add support for CREATE SEQUENCE IF NOT EXISTS +#4974 - Add ExecuteListener to jOOQ-meta logging a warning when queries take longer than 5s +#4991 - Deprecate Param.setValue(), setConverted(), setInline() +#4997 - Add DSL.recordType(Field[]) +#4999 - Add StopWatch.splitXXX(message, threshold) to log a message only if a threshold has been passed +#5009 - Generate the JPA GeneratedValue annotation on identity columns +#5011 - Add mergeInto(Table).columns(...).values(...) as an alternative syntax for H2's MERGE +#5012 - Add CompletionStage> ResultQuery.fetchAsync() and fetchAsync(Executor) +#5014 - Add Query.executeAsync() and executeAsync(Executor) +#5015 - Add DBMS_AQ.dequeueStream() to create an Oracle AQ Stream +#5016 - Add DBMS_AQ.dequeueIterable() to create an Oracle AQ Iterable +#5021 - Add DBMS_AQ.dequeueAsync() to create an Oracle AQ CompletionStage +#5022 - Clarify fetch() Javadoc with respect to nullable results +#5038 - Add an example to the manual showing how to use the maven ant plugin +#5040 - Add a new ExecutorProvider Configuration.executorProvider() SPI for asynchronous tasks +#5046 - Issue a warning when Record.field(String) runs into ambiguous columns +#5055 - Add CreateTableColumnStep.column(Field) for convenience +#5056 - Add org.jooq.Queries, a wrapper for Query[] +#5057 - Replace Collection.toArray(new T[size]) calls by Collection.toArray(new T[0]) calls +#5058 - Add DSLContext.batch(Queries) and other overloads where Query[] or Collection are accepted +#5059 - Add CreateTableColumnStep.columns(Field...) +#5061 - Improve formatting of DDL statements +#5064 - Improve formatting for MySQL's ON DUPLICATE KEY UPDATE clause +#5065 - Make all internal classes final if they're not intended for extension +#5066 - Add CreateTableColumnStep.column(Name, DataType) +#5067 - Add AlterTableStep.alter[Column](Name), add[Column](Name), drop[Column](Name) +#5072 - Add default implementations for SPIs, accepting functional event handlers +#5077 - Add more examples for using RVE IN predicates +#5081 - Add support for ALTER TABLE .. RENAME TO .. +#5082 - Add support for ALTER TABLE .. RENAME COLUMN .. TO .. +#5086 - Add support for ALTER TABLE .. RENAME CONSTRAINT .. TO .. +#5093 - Implement INSERT .. ON DUPLICATE KEY IGNORE using INSERT .. ON CONFLICT in PostgreSQL 9.5 also when using SQLDialect.POSTGRES +#5105 - DEBUG-Log exceptions in LoggerListener +#5113 - Remove Vertabelo Plugin from jOOQ-meta-extensions +#5117 - Overload internal Tools.field(T) method with concrete T types +#5118 - Log error in JDBCUtils.safeFree() methods, in case of ignored exception +#5122 - Improve Javadoc for Loader.loadArrays() +#5123 - Add LoaderSourceStep.loadArrays(Stream) and loadRecords(Stream) +#5124 - Add a chapter to the manual about case-insensitivity (e.g. in filtering, grouping, sorting) +#5144 - Improve CASE expression formatting +#5145 - Add LoaderXXXStep.fields(FieldMapper) for better mapping between source and target fields +#5154 - Add support for mapping Record1 to Enum by Enum.valueOf() in DefaultRecordMapper +#5161 - Add logback.xml file to jOOQ-spring-boot-example to enable DEBUG logging per default +#5163 - Add UpdatableRecord.refresh(Collection>), store(Collection), insert(Collection), update(Collection) +#5164 - Implement BindingSetStatementContext.toString() for improved debugging +#5190 - Support UPDATE and DELETE RETURNING for Oracle using PL/SQL RETURNING .. INTO +#5192 - Add SafeVarargs annotation to DSL.values() constructor methods + + +Breaking changes +---------------- + +#3323 - Make QueryPartInternal.toSQL() and bind() final in favour of the new accept() method +#4388 - Compilation errors when applying for PostgreSQL array types +#4650 - Collect bind variables while generating SQL, instead of traversing the AST twice +#4658 - Let DSL.zero(), one(), two() return Param instead of Field +#4815 - Relax bound from > to for DSLContext.loadInto() + Bug Fixes --------- + +#2549 - SQLDialectNotSupportedException when calling DSL.val(EnumType) +#2995 - INSERT INTO table SELECT ... renders bad SQL when column names are omitted and a plain SQL table is given +#3225 - Performance bottleneck in MetaFieldProvider when fetching unknown plain SQL fields +#3354 - Fix manual's sections about plain SQL. Avoid referencing to toSQL() and bind() directly #3935 - InternalVisitListener accounts for a lot of CPU load -#4624 - Column of type "TIMESTAMP WITH TIME ZONE" lead to invalid TableImpl in 3.7.0 +#4131 - DSLContext.extractBindValues(QueryPart) doesn't report the implicit bind values from plain SQL QueryParts +#4427 - ScalaGenerator generates Java code for MySQL / PostgreSQL enum types +#4624 - Compilation error in generated code when column is of type "TIMESTAMP WITH TIME ZONE" in Oracle #4626 - Zero-length DAO source files generated for non-updatable tables #4634 - Significant CPU overhead in CursorImpl$CursorIterator#fetchOne() due to frequent HashMap access #4637 - Regression in Table.onKey(ForeignKey) with multiple joins @@ -111,9 +292,93 @@ Bug Fixes #4642 - Significant schema mapping initialisation overhead when schema mapping isn't even used #4646 - Significant overhead from Scope.data() Map access #4651 - Significant overhead caused by AbstractContext's internal ArrayDeque stacks that created even if there are no VisitListeners +#4659 - Significant overhead caused by type lookup when using DSL.val(T) or DSL.inline(T) in org.jooq.impl.Limit #4664 - Inefficent initialisation of SortFieldList and other QueryPartLists #4668 - Significant overhead caused by check if FROM clause is needed #4672 - Too many context objects are created when generating SQL +#4678 - Plain SQL version SelectJoinStep.straightJoin() is missing @PlainSQL annotation +#4680 - Manual 3.6+ makes use of deprecated fieldByName() and tableByName() methods +#4682 - Code generation for Postgres DBs assumes column data type to be in same schema as table +#4685 - Manual's "More info about how to read this manual" always refers to 3.4 version of the manual +#4686 - Incomplete overloading of SelectJoinStep.straightJoin() +#4692 - Use correct term for "ordered-set aggregate function" in Javadoc and manual +#4708 - Wrong enum type referenced from UDT, when the same enum type exists in different schemas in PostgreSQL +#4712 - Cannot call standalone PostgreSQL function with enum array return type in non-public schema +#4737 - Documentation bug: Deprecation remark on fieldByName(Class, String...) points to wrong substitute +#4740 - ClassCastException when using DSL.any() in a Condition Field +#4744 - Record getter and setter names are generated with Mode.DEFAULT rather than Mode.Record +#4749 - Regression in AbstractParam throwing StackOverflowError when calling UDTRecord.toString() +#4755 - Manual typo. Manual still referring to "T_" prefix in tables +#4762 - org.jooq.Meta must not cache DatabaseMetaData in order not to violate the ConnectionProvider contract +#4771 - Confusing SQLDialectNotSupportedException when passing wrong arguments to DSL.nvl() function, and others +#4772 - Extremely slow mapping Record.into(ProxyableInterface.class) +#4773 - DefaultRecordMapper is not thread safe when mapping proxyable interface +#4780 - OracleDSL.DBMS_AQ.enqueue() and dequeue() produce wrong syntax depending on parameters that are passed +#4782 - OracleDSL.DBMS_AQ.dequeue() does not return any MESSAGE_PROPERTIES_T values +#4783 - Unnecessary SQL exception logged in code generator +#4798 - Manual typo: Update returning doesn't return update count +#4800 - Oracle Functions accepting returning PL/SQL-only types are not "SQL usable" +#4802 - Oracle views with dollar sign '$' in them are not generated +#4806 - CREATE VIEW statement fails when it contains bind variables +#4820 - Oracle LONG and LONG RAW columns cause "Stream has already been closed" exception when not placed in first position +#4829 - Generated convenience methods Routines.f() have misleading Javadoc +#4840 - is a regular expression. The manual should make an indication about this +#4843 - Missing @Support annotations for Vertica and window functions and other API elements +#4849 - Wrong emulation of SINH() and other hyperbolic functions for Vertica +#4851 - Wrong emulation of bitwise XOR for Vertica +#4863 - Manual section about importing CSV erroneously refers to AUTHOR table rather than BOOK table +#4870 - SQLDialect.POSTGRES_x_x Javadoc is wrong +#4880 - Escaped block comment inside of Scaladoc causes compilation error +#4883 - Table valued functions generate bad Scala code +#4890 - Typo in doc, part "3.4.4. Using jOOQ with Flyway" +#4910 - Bad SQL generated for CREATE TABLE AS SELECT .. FROM (SELECT ..) in SQL Server +#4920 - Generated functions without parameter names produce malformed SQL +#4922 - A negligible amount of CPU is spent in String.indexOf() because of identifier escaping +#4926 - A small amount of CPU time is wasted on Operator.name().toLowerCase() +#4935 - Convert.convert(long, Instant.class) shouldn't pass by LocalDateTime +#4939 - SQLFeatureNotSupportedException thrown in some (unsupported) SQLDialects when initalizing MetaDataFieldProvider +#4953 - Very slow code generation in Oracle when existing DB Links are not available +#4955 - ClassCastException when applying schema mapping on procedures and types in Oracle +#4957 - NullPointerException in ArrayRecord.toString() when ArrayRecord is not attached +#4964 - Type handling issue when using a custom type with a Postgres UDT field +#4966 - Standalone calls to Oracle pipelined functions aren't possible +#4970 - PostgreSQL code generation does not stably order overloaded routines +#4976 - jOOQ's internals should not call QueryPartInternal.accept(Context), but Context.visit(QueryPart) instead. +#4977 - HSQLDB does not support bind variables in DDL statements +#4981 - Wrong SQL generated for CREATE TABLE .. AS SELECT in HSQLDB +#4985 - Utils.executeImmediate() doesn't work when inlined SQL contains apostrophes +#4992 - Support for emulating VALUES clauses in H2 is inefficient +#4996 - DateAsTimestampBinding doesn't work as documented in the manual +#5004 - Misleading Javadoc on DSL.table(String) +#5010 - Remove push tag from repository +#5017 - NullPointerException when using MockConnection with DSLContext.transaction() +#5024 - Wrong implementation of internal SortFieldList.nulls() +#5028 - Slow routine overload index calculation in PostgreSQL's code generator +#5042 - Record[N].values(T1, T2, ..., TN) is not implemented +#5051 - TableAlias does not delegate getIdentity(), getPrimaryKey(), getKeys(), getRecordVersion(), getRecordTimestamp() calls to aliased table +#5068 - SQL Server 2008 SELECT DISTINCT .. LIMIT .. OFFSET emulation does not keep ORDER BY semantics in complex queries +#5088 - Bad deserialisation of PostgreSQL UDTs that contain boolean attributes +#5089 - Wrong SQL generated for multi row INSERT when ON DUPLICATE KEY IGNORE is emulated +#5095 - ScalaGenerator produces an invalid import expression for SQL array types +#5097 - Table.getPrimaryKey() does not work with SQLite's Xerial JDBC driver, when primary key column contains upper-case characters +#5103 - Tables referencing object arrays generate Record array in POJOs, rather than POJO array +#5104 - Bad HTML in ExecuteListener.outStart() Javadoc +#5106 - Result.formatXXX() methods should flush Writers to prevent data loss +#5128 - Don't generate javax.validation.NotNull for defaulted columns +#5134 - OracleConnection Class not found when jOOQ runs in OSGi and ARRAY types are bound +#5140 - DSL.currentTimestamp() cannot be used as a default value for a column, via alterTable +#5150 - Settings.backslashEscaping is not applied to LIKE .. ESCAPE clause +#5158 - FILTER (WHERE ...) and OVER() is not applied to PostgreSQL ARRAY_AGG() +#5167 - Possible NPE when calling InsertImpl.set(Field, Select) with a null Select +#5174 - NullPointerException when calling Query.getSQL() on an unattached Query +#5180 - DefaultBindings for OffsetTime and OffsetDateTime handle negative offsets +#5182 - Meta Table.getKeys() returns an empty list containing "null", if a table has no primary key +#5186 - Excessive log level when ignoring foreign key referencing an out-of-scope schema +#5193 - PostgreSQL timestamp deserialisation loses millisecond precision, when timestamp is contained in an array of composite types +#5202 - MySQL unsigned data types in stored procedures and functions are not captured correctly by jOOQ's code generator +#5212 - MetaDataFieldProvider should not catch SQLFeatureNotSupportedException from ResultSetMetaData calls +#5225 - Results.clear() does not remove update counts + Version 3.7.0 - October 8, 2015 diff --git a/jOOQ-release/release/template/maven-install.bat b/jOOQ-release/release/template/maven-install.bat index c6798632aa..dbc502bc99 100644 --- a/jOOQ-release/release/template/maven-install.bat +++ b/jOOQ-release/release/template/maven-install.bat @@ -1,5 +1,5 @@ @echo off -set VERSION=3.8.0-SNAPSHOT +set VERSION=3.8.0 if exist jOOQ-javadoc\jooq-%VERSION%-javadoc.jar ( set JAVADOC_JOOQ=-Djavadoc=jOOQ-javadoc\jooq-%VERSION%-javadoc.jar diff --git a/jOOQ-release/release/template/maven-install.sh b/jOOQ-release/release/template/maven-install.sh index a873ebb355..f8ce1d5463 100644 --- a/jOOQ-release/release/template/maven-install.sh +++ b/jOOQ-release/release/template/maven-install.sh @@ -1,5 +1,5 @@ #!/bin/sh -VERSION=3.8.0-SNAPSHOT +VERSION=3.8.0 if [ -f jOOQ-javadoc/jooq-$VERSION-javadoc.jar ]; then JAVADOC_JOOQ=-Djavadoc=jOOQ-javadoc/jooq-$VERSION-javadoc.jar diff --git a/jOOQ-scala/pom.xml b/jOOQ-scala/pom.xml index 478adba3cf..8976671a15 100644 --- a/jOOQ-scala/pom.xml +++ b/jOOQ-scala/pom.xml @@ -7,7 +7,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 org.jooq diff --git a/jOOQ/.classpath b/jOOQ/.classpath deleted file mode 100644 index 4797b1bdaf..0000000000 --- a/jOOQ/.classpath +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jOOQ/.project b/jOOQ/.project deleted file mode 100644 index d215801b7d..0000000000 --- a/jOOQ/.project +++ /dev/null @@ -1,24 +0,0 @@ - - - jooq - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/jOOQ/.settings/org.eclipse.core.resources.prefs b/jOOQ/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 1918b5508c..0000000000 --- a/jOOQ/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,5 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/main/java=UTF-8 -encoding//src/main/resources=UTF-8 -encoding//target/generated-sources/xjc=UTF-8 -encoding/=UTF-8 diff --git a/jOOQ/.settings/org.eclipse.jdt.core.prefs b/jOOQ/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index d59e09c909..0000000000 --- a/jOOQ/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/jOOQ/.settings/org.eclipse.m2e.core.prefs b/jOOQ/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index 14b697b7bb..0000000000 --- a/jOOQ/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/jOOQ/.settings/org.eclipse.pde.core.prefs b/jOOQ/.settings/org.eclipse.pde.core.prefs deleted file mode 100644 index 394603ceee..0000000000 --- a/jOOQ/.settings/org.eclipse.pde.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_ROOT_PATH=target/classes -eclipse.preferences.version=1 diff --git a/jOOQ/pom.xml b/jOOQ/pom.xml index 019bf20ed4..0bea9530a1 100644 --- a/jOOQ/pom.xml +++ b/jOOQ/pom.xml @@ -7,7 +7,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 org.jooq diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index 11bdd2e0c1..f8b13ac2b7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -81,8 +81,6 @@ package org.jooq.impl; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; // ... import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; @@ -495,7 +493,7 @@ final class MetaImpl implements Meta, Serializable { @Override public final List> getKeys() { UniqueKey pk = getPrimaryKey(); - return pk == null ? emptyList() : singletonList(pk); + return pk == null ? Collections.>emptyList() : Collections.>singletonList(pk); } @Override diff --git a/pom.xml b/pom.xml index 527662fbe9..01caf28be5 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ org.jooq jooq-parent - 3.8.0-SNAPSHOT + 3.8.0 pom jOOQ Parent