From 18e05cea7571eec26c0ece78d42194e8bd75e930 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 20 Apr 2012 09:35:15 +0000 Subject: [PATCH] [#1324] Code generation error in Oracle 10g when generating stored procedures --- .../util/oracle/OracleRoutineDefinition.java | 31 +++++++++++++++++-- jOOQ/src/main/java/org/jooq/Parameter.java | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/util/oracle/OracleRoutineDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/oracle/OracleRoutineDefinition.java index 6b87b3f34b..39bdb9a09a 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/oracle/OracleRoutineDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/oracle/OracleRoutineDefinition.java @@ -36,11 +36,14 @@ package org.jooq.util.oracle; +import static org.jooq.impl.Factory.inline; import static org.jooq.util.oracle.sys.Tables.ALL_ARGUMENTS; +import static org.jooq.util.oracle.sys.Tables.ALL_COL_COMMENTS; import java.math.BigDecimal; import java.sql.SQLException; +import org.jooq.Field; import org.jooq.Record; import org.jooq.Result; import org.jooq.tools.StringUtils; @@ -58,6 +61,8 @@ import org.jooq.util.SchemaDefinition; */ public class OracleRoutineDefinition extends AbstractRoutineDefinition { + private static Boolean is11g; + private final BigDecimal objectId; public OracleRoutineDefinition(SchemaDefinition schema, PackageDefinition pkg, String name, String comment, BigDecimal objectId, String overload) { @@ -68,7 +73,14 @@ public class OracleRoutineDefinition extends AbstractRoutineDefinition { @Override protected void init0() throws SQLException { - Result result = create().select( + + // [#1324] The ALL_ARGUMENTS.DEFAULTED column is available in Oracle 11g + // only. This feature should thus be deactivated for older versions + Field defaulted = is11g() + ? ALL_ARGUMENTS.DEFAULTED + : inline("N"); + + Result result = create().select( ALL_ARGUMENTS.IN_OUT, ALL_ARGUMENTS.ARGUMENT_NAME, ALL_ARGUMENTS.DATA_TYPE, @@ -77,7 +89,7 @@ public class OracleRoutineDefinition extends AbstractRoutineDefinition { ALL_ARGUMENTS.DATA_SCALE, ALL_ARGUMENTS.TYPE_NAME, ALL_ARGUMENTS.POSITION, - ALL_ARGUMENTS.DEFAULTED) + defaulted) .from(ALL_ARGUMENTS) .where(ALL_ARGUMENTS.OWNER.equal(getSchema().getName())) .and(ALL_ARGUMENTS.OBJECT_NAME.equal(getName())) @@ -118,9 +130,22 @@ public class OracleRoutineDefinition extends AbstractRoutineDefinition { name, position, type, - record.getValue(ALL_ARGUMENTS.DEFAULTED, boolean.class)); + record.getValue(defaulted, boolean.class)); addParameter(inOut, parameter); } } + + private boolean is11g() { + if (is11g == null) { + is11g = create().selectCount() + .from(ALL_COL_COMMENTS) + .where(ALL_COL_COMMENTS.OWNER.equal(ALL_ARGUMENTS.getSchema().getName())) + .and(ALL_COL_COMMENTS.TABLE_NAME.equal(ALL_ARGUMENTS.getName())) + .and(ALL_COL_COMMENTS.COLUMN_NAME.equal(ALL_ARGUMENTS.DEFAULTED.getName())) + .fetchOne(0, boolean.class); + } + + return is11g; + } } diff --git a/jOOQ/src/main/java/org/jooq/Parameter.java b/jOOQ/src/main/java/org/jooq/Parameter.java index 093aa69591..214d57733f 100644 --- a/jOOQ/src/main/java/org/jooq/Parameter.java +++ b/jOOQ/src/main/java/org/jooq/Parameter.java @@ -73,7 +73,7 @@ public interface Parameter extends NamedTypeProviderQueryPart { * If a procedure has defaulted parameters, jOOQ binds them by name, rather * than by index. *

- * Currently, this is only supported for Oracle + * Currently, this is only supported for Oracle 11g */ @Support({ ORACLE }) boolean isDefaulted();