[#7381] 3.11 code generator for H2 throws "Error while fetching enums" exception

This commit is contained in:
lukaseder 2018-04-05 20:53:44 +03:00
parent 9cc13c4fe7
commit e8f63e37f4
2 changed files with 29 additions and 27 deletions

View File

@ -37,6 +37,7 @@
*/
package org.jooq.util.h2;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.select;
import static org.jooq.util.h2.information_schema.tables.Columns.COLUMNS;
import static org.jooq.util.h2.information_schema.tables.Constraints.CONSTRAINTS;
@ -62,6 +63,7 @@ import org.jooq.Record4;
import org.jooq.Result;
import org.jooq.SQLDialect;
import org.jooq.SortOrder;
import org.jooq.exception.DataAccessException;
import org.jooq.impl.DSL;
import org.jooq.tools.csv.CSVReader;
import org.jooq.util.AbstractDatabase;
@ -467,6 +469,9 @@ public class H2Database extends AbstractDatabase {
protected List<EnumDefinition> getEnums0() throws SQLException {
List<EnumDefinition> result = new ArrayList<EnumDefinition>();
if (!is1_4_197())
return result;
Result<Record4<String, String, String, String>> records = create()
.select(
Columns.TABLE_SCHEMA,
@ -541,4 +546,27 @@ public class H2Database extends AbstractDatabase {
List<ArrayDefinition> result = new ArrayList<ArrayDefinition>();
return result;
}
private static Boolean is1_4_197;
boolean is1_4_197() {
if (is1_4_197 == null) {
// [#5874] The COLUMNS.COLUMN_TYPE column was introduced in H2 1.4.197
try {
create(true)
.select(Columns.COLUMN_TYPE)
.from(COLUMNS)
.where(falseCondition())
.fetch();
is1_4_197 = true;
}
catch (DataAccessException e) {
is1_4_197 = false;
}
}
return is1_4_197;
}
}

View File

@ -38,7 +38,6 @@
package org.jooq.util.h2;
import static org.jooq.impl.DSL.choose;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.zero;
@ -51,7 +50,6 @@ import java.util.List;
import org.jooq.Param;
import org.jooq.Record;
import org.jooq.exception.DataAccessException;
import org.jooq.util.AbstractTableDefinition;
import org.jooq.util.ColumnDefinition;
import org.jooq.util.DataTypeDefinition;
@ -68,8 +66,6 @@ import org.jooq.util.h2.information_schema.tables.Columns;
*/
public class H2TableDefinition extends AbstractTableDefinition {
private static Boolean is1_4_197;
public H2TableDefinition(SchemaDefinition schema, String name, String comment) {
super(schema, name, comment);
}
@ -89,7 +85,7 @@ public class H2TableDefinition extends AbstractTableDefinition {
Columns.COLUMN_NAME,
Columns.ORDINAL_POSITION,
Columns.TYPE_NAME,
is1_4_197() ? Columns.COLUMN_TYPE : inline("").as(Columns.COLUMN_TYPE),
((H2Database) getDatabase()).is1_4_197() ? Columns.COLUMN_TYPE : inline("").as(Columns.COLUMN_TYPE),
choose().when(Columns.NUMERIC_PRECISION.eq(maxP).and(Columns.NUMERIC_SCALE.eq(maxS)), zero())
.otherwise(Columns.CHARACTER_MAXIMUM_LENGTH).as(Columns.CHARACTER_MAXIMUM_LENGTH),
Columns.NUMERIC_PRECISION.decode(maxP, zero(), Columns.NUMERIC_PRECISION).as(Columns.NUMERIC_PRECISION),
@ -135,26 +131,4 @@ public class H2TableDefinition extends AbstractTableDefinition {
return result;
}
boolean is1_4_197() {
if (is1_4_197 == null) {
// [#5874] The COLUMNS.COLUMN_TYPE column was introduced in H2 1.4.197
try {
create(true)
.select(Columns.COLUMN_TYPE)
.from(COLUMNS)
.where(falseCondition())
.fetch();
is1_4_197 = true;
}
catch (DataAccessException e) {
is1_4_197 = false;
}
}
return is1_4_197;
}
}