diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java index c35e11d50d..080ce380db 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDataType.java @@ -278,10 +278,14 @@ public class DefaultDataType implements DataType { // Dialect-specific data types int ordinal = dialect == null ? SQLDialect.SQL99.ordinal() : dialect.ordinal(); - String normalised = DefaultDataType.normalise(typeName); - if (TYPES_BY_NAME[ordinal].get(normalised) == null) { - TYPES_BY_NAME[ordinal].put(normalised, this); + // [#3225] Avoid normalisation if not necessary + if (!TYPES_BY_NAME[ordinal].containsKey(typeName.toUpperCase())) { + String normalised = DefaultDataType.normalise(typeName); + + if (TYPES_BY_NAME[ordinal].get(normalised) == null) { + TYPES_BY_NAME[ordinal].put(normalised, this); + } } if (TYPES_BY_TYPE[ordinal].get(type) == null) { @@ -620,12 +624,17 @@ public class DefaultDataType implements DataType { } public static DataType getDataType(SQLDialect dialect, String typeName) { - String normalised = DefaultDataType.normalise(typeName); - DataType result = TYPES_BY_NAME[dialect.ordinal()].get(normalised); + DataType result = TYPES_BY_NAME[dialect.ordinal()].get(typeName.toUpperCase()); + + // [#3225] Normalise only if necessary + if (result == null) { + typeName = DefaultDataType.normalise(typeName); + result = TYPES_BY_NAME[dialect.ordinal()].get(typeName); + } // UDT data types and others are registered using SQL99 if (result == null) { - result = TYPES_BY_NAME[SQLDialect.SQL99.ordinal()].get(normalised); + result = TYPES_BY_NAME[SQLDialect.SQL99.ordinal()].get(typeName); } if (result == null) { @@ -806,7 +815,7 @@ public class DefaultDataType implements DataType { * Convert a type name (using precision and scale) into a Java class */ public static DataType getDataType(SQLDialect dialect, String t, int p, int s) throws SQLDialectNotSupportedException { - DataType result = DefaultDataType.getDataType(dialect, DefaultDataType.normalise(t)); + DataType result = DefaultDataType.getDataType(dialect, t); if (result.getType() == BigDecimal.class) { result = DefaultDataType.getDataType(dialect, getNumericClass(p, s)); diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java index 8754ed2531..862c661f90 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -89,7 +89,7 @@ class DefaultRenderContext extends AbstractContext implements Ren private int params; private int alias; private int indent; - private Stack indentLock = new Stack(); + private Stack indentLock; private int printMargin = 80; // [#1632] Cached values from Settings @@ -295,10 +295,18 @@ class DefaultRenderContext extends AbstractContext implements Ren return this; } + private Stack indentLock() { + if (indentLock == null) { + indentLock = new Stack(); + } + + return indentLock; + } + @Override public final RenderContext formatIndentLockStart() { if (cachedRenderFormatted) { - indentLock.push(indent); + indentLock().push(indent); String[] lines = sql.toString().split("[\\n\\r]"); indent = lines[lines.length - 1].length(); } @@ -309,7 +317,7 @@ class DefaultRenderContext extends AbstractContext implements Ren @Override public final RenderContext formatIndentLockEnd() { if (cachedRenderFormatted) { - indent = indentLock.pop(); + indent = indentLock().pop(); } return this; diff --git a/jOOQ/src/main/java/org/jooq/impl/SQLTemplate.java b/jOOQ/src/main/java/org/jooq/impl/SQLTemplate.java index 3abc43a883..2a1435d5bc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SQLTemplate.java +++ b/jOOQ/src/main/java/org/jooq/impl/SQLTemplate.java @@ -87,5 +87,10 @@ class SQLTemplate implements Template { public final Clause[] clauses(Context ctx) { return CLAUSES; } + + @Override + public String toString() { + return sql; + } } }