diff --git a/jOOQ-test/src/org/jooq/test/jOOQOracleTest.java b/jOOQ-test/src/org/jooq/test/jOOQOracleTest.java index 7961ac55e0..da09460bf4 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQOracleTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQOracleTest.java @@ -38,6 +38,7 @@ package org.jooq.test; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; +import static org.jooq.impl.Factory.currentUser; import static org.jooq.impl.Factory.falseCondition; import static org.jooq.impl.Factory.one; import static org.jooq.impl.Factory.substring; @@ -69,6 +70,7 @@ import static org.jooq.util.oracle.OracleFactory.level; import static org.jooq.util.oracle.OracleFactory.prior; import static org.jooq.util.oracle.OracleFactory.rownum; import static org.jooq.util.oracle.OracleFactory.sysConnectByPath; +import static org.jooq.util.oracle.OracleFactory.sysContext; import java.math.BigDecimal; import java.math.BigInteger; @@ -998,4 +1000,13 @@ public class jOOQOracleTest extends jOOQAbstractTest< assertEquals(now, org.jooq.test.oracle2.generatedclasses.packages.Pkg_976.f_976(ora(), now)); assertEquals(now, ora().select(org.jooq.test.oracle2.generatedclasses.packages.Pkg_976.f_976(now)).fetchOne(0)); } + + @Test + public void testOracleFunctions() { + Record user = ora().select( + sysContext("USERENV", "SESSION_USER"), + currentUser()).fetchOne(); + + assertEquals(user.getValue(0), user.getValue(1)); + } } diff --git a/jOOQ/src/main/java/org/jooq/util/oracle/OracleFactory.java b/jOOQ/src/main/java/org/jooq/util/oracle/OracleFactory.java index 5befc9a2c1..f96127424e 100644 --- a/jOOQ/src/main/java/org/jooq/util/oracle/OracleFactory.java +++ b/jOOQ/src/main/java/org/jooq/util/oracle/OracleFactory.java @@ -44,6 +44,7 @@ import org.jooq.SQLDialect; import org.jooq.SchemaMapping; import org.jooq.impl.CustomField; import org.jooq.impl.Factory; +import org.jooq.impl.SQLDataType; /** * A {@link SQLDialect#ORACLE} specific factory @@ -97,6 +98,24 @@ public class OracleFactory extends Factory { return field("rowid", String.class); } + // ------------------------------------------------------------------------- + // Oracle-specific functions + // ------------------------------------------------------------------------- + + /** + * The Oracle-specific SYS_CONTEXT function + */ + public static Field sysContext(String namespace, String parameter) { + return function("sys_context", SQLDataType.VARCHAR, val(namespace), val(parameter)); + } + + /** + * The Oracle-specific SYS_CONTEXT function + */ + public static Field sysContext(String namespace, String parameter, int length) { + return function("sys_context", SQLDataType.VARCHAR, val(namespace), val(parameter), val(length)); + } + // ------------------------------------------------------------------------- // Pseudo-and functions for use in the context of a CONNECT BY clause // -------------------------------------------------------------------------