You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by rh...@apache.org on 2008/10/03 14:44:35 UTC
svn commit: r701367 - in /db/derby/code/trunk/java:
engine/org/apache/derby/catalog/types/
engine/org/apache/derby/impl/sql/compile/
testing/org/apache/derbyTesting/functionTests/master/
testing/org/apache/derbyTesting/functionTests/master/DerbyNet/ te...
Author: rhillegas
Date: Fri Oct 3 05:44:34 2008
New Revision: 701367
URL: http://svn.apache.org/viewvc?rev=701367&view=rev
Log:
DERBY-3570: Add ability to declare DETERMINISTIC routines.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net_territory.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net_territory.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB.sql
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_5.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java Fri Oct 3 05:44:34 2008
@@ -366,11 +366,16 @@
}
sb.append(" LANGUAGE JAVA PARAMETER STYLE " );
+
switch( parameterStyle )
{
case PS_JAVA: sb.append( "JAVA " ); break;
case PS_DERBY_JDBC_RESULT_SET: sb.append( "DERBY_JDBC_RESULT_SET " ); break;
}
+
+ if ( isDeterministic() )
+ { sb.append( " DETERMINISTIC " ); }
+
sb.append(RoutineAliasInfo.SQL_CONTROL[getSQLAllowed()]);
if ((returnType == null) &&
(dynamicResultSets != 0))
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj Fri Oct 3 05:44:34 2008
@@ -2151,6 +2151,7 @@
| <DATE: "date">
| <DAY: "day">
| <DEFINER: "definer">
+| <DETERMINISTIC: "deterministic">
| <DYNAMIC: "dynamic">
| <FORTRAN: "fortran">
| <GENERATED: "generated">
@@ -10027,6 +10028,20 @@
|
<LANGUAGE> <JAVA> { clauseValue = "JAVA"; clausePosition = CreateAliasNode.LANGUAGE; }
|
+ <DETERMINISTIC>
+ {
+ clauseValue = Boolean.TRUE;
+ clausePosition = CreateAliasNode.DETERMINISTIC;
+ checkVersion(DataDictionary.DD_VERSION_DERBY_10_5, "DETERMINISTIC");
+ }
+ |
+ <NOT> <DETERMINISTIC>
+ {
+ clauseValue = Boolean.FALSE;
+ clausePosition = CreateAliasNode.DETERMINISTIC;
+ checkVersion(DataDictionary.DD_VERSION_DERBY_10_5, "DETERMINISTIC");
+ }
+ |
<EXTERNAL> <NAME> clauseValue = string() { clausePosition = CreateAliasNode.EXTERNAL_NAME; }
|
<PARAMETER> <STYLE> clauseValue = parameterStyle( isTableFunction ) { clausePosition = CreateAliasNode.PARAMETER_STYLE; }
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net.out?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net.out Fri Oct 3 05:44:34 2008
@@ -23,6 +23,26 @@
<systemname>
-----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -73,6 +93,26 @@
<systemname>
-----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net_territory.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net_territory.out?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net_territory.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNet/dblook_test_net_territory.out Fri Oct 3 05:44:34 2008
@@ -23,6 +23,26 @@
<systemname>
-----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -73,6 +93,26 @@
<systemname>
-----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net.out?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net.out Fri Oct 3 05:44:34 2008
@@ -23,6 +23,26 @@
<systemname>
-----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -73,6 +93,26 @@
<systemname>
-----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net_territory.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net_territory.out?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net_territory.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/DerbyNetClient/dblook_test_net_territory.out Fri Oct 3 05:44:34 2008
@@ -23,6 +23,26 @@
<systemname>
-----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+-----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -73,6 +93,26 @@
<systemname>
-----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+-----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test.out Fri Oct 3 05:44:34 2008
@@ -16,6 +16,26 @@
<systemname>
----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -66,6 +86,26 @@
<systemname>
----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
@@ -2003,6 +2043,26 @@
<systemname>
----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -2053,6 +2113,26 @@
<systemname>
----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/dblook_test_territory.out Fri Oct 3 05:44:34 2008
@@ -16,6 +16,26 @@
<systemname>
----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -66,6 +86,26 @@
<systemname>
----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
@@ -2003,6 +2043,26 @@
<systemname>
----
<systemid>
+F_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
+F_NOT_DETERMINISTIC
+APP
+foo.bar
+F
+F
+false
+wibble() RETURNS INTEGER LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL CALLED ON NULL INPUT
+<systemname>
+----
+<systemid>
GATP2
FOO
org.apache.derbyTesting.functionTests.util.TestPropertyInfo
@@ -2053,6 +2113,26 @@
<systemname>
----
<systemid>
+P_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA DETERMINISTIC MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
+P_NOT_DETERMINISTIC
+APP
+foo.bar
+P
+P
+false
+wibble() LANGUAGE JAVA PARAMETER STYLE JAVA MODIFIES SQL DATA
+<systemname>
+----
+<systemid>
SQQLCONTROL_1
FOO
org.apache.derbyTesting.functionTests.util.ProcedureTest
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java Fri Oct 3 05:44:34 2008
@@ -53,6 +53,8 @@
//
///////////////////////////////////////////////////////////////////////////////////
+ private static final String REDUNDANT_CLAUSE = "42613";
+
///////////////////////////////////////////////////////////////////////////////////
//
// STATE
@@ -94,7 +96,7 @@
///////////////////////////////////////////////////////////////////////////////////
//
- // SUCCESSFUL RESOLUTIONS
+ // TESTS
//
///////////////////////////////////////////////////////////////////////////////////
@@ -102,7 +104,9 @@
* <p>
* Test that the stored system procedures and functions are non-deterministic. If you want
* a particular procedure/function to be deterministic, add some logic here.
+ * </p>
*
+ * </p>
* Also test that, by default, user-defined routines are created as NOT DETERMINISTIC.
* </p>
*/
@@ -157,18 +161,219 @@
RoutineAliasInfo rai = (RoutineAliasInfo) rs.getObject( 5 );
- assertFalse( aliasName, rai.isDeterministic() );
+ if ( isSystemAlias ) { assertFalse( aliasName, rai.isDeterministic() ); }
}
rs.close();
ps.close();
}
+ /**
+ * <p>
+ * Basic positive tests for DETERMINISTIC keyword.
+ * </p>
+ */
+ public void test_002_determinism_positive()
+ throws Exception
+ {
+ Connection conn = getConnection();
+
+ goodStatement
+ (
+ conn,
+ "create function f11()\n" +
+ "returns int\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "no sql\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ assertDeterministic( conn, "F11", false );
+
+ goodStatement
+ (
+ conn,
+ "create function f12()\n" +
+ "returns int\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "deterministic\n" +
+ "no sql\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ assertDeterministic( conn, "F12", true );
+
+ goodStatement
+ (
+ conn,
+ "create function f13()\n" +
+ "returns int\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "no sql\n" +
+ "not deterministic\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ assertDeterministic( conn, "F13", false );
+
+ goodStatement
+ (
+ conn,
+ "create procedure p11()\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "modifies sql data\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ assertDeterministic( conn, "P11", false );
+
+ goodStatement
+ (
+ conn,
+ "create procedure p12()\n" +
+ "deterministic\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "modifies sql data\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ assertDeterministic( conn, "P12", true );
+
+ goodStatement
+ (
+ conn,
+ "create procedure p13()\n" +
+ "language java\n" +
+ "not deterministic\n" +
+ "parameter style java\n" +
+ "modifies sql data\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ assertDeterministic( conn, "P13", false );
+ }
+
+ /**
+ * <p>
+ * Verify that we get errors when there is more than one determinism clause
+ * in a routine declaration.
+ * </p>
+ */
+ public void test_003_determinism_redundantClause()
+ throws Exception
+ {
+ Connection conn = getConnection();
+ expectError
+ (
+ REDUNDANT_CLAUSE,
+ "create function f_fail()\n" +
+ "returns int\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "deterministic\n" +
+ "deterministic\n" +
+ "no sql\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ expectError
+ (
+ REDUNDANT_CLAUSE,
+ "create function f_fail()\n" +
+ "returns int\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "not deterministic\n" +
+ "deterministic\n" +
+ "no sql\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ expectError
+ (
+ REDUNDANT_CLAUSE,
+ "create procedure p_fail()\n" +
+ "language java\n" +
+ "deterministic\n" +
+ "parameter style java\n" +
+ "modifies sql data\n" +
+ "deterministic\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ expectError
+ (
+ REDUNDANT_CLAUSE,
+ "create procedure p_fail()\n" +
+ "language java\n" +
+ "not deterministic\n" +
+ "parameter style java\n" +
+ "modifies sql data\n" +
+ "not deterministic\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ }
+
///////////////////////////////////////////////////////////////////////////////////
//
// MINIONS
//
///////////////////////////////////////////////////////////////////////////////////
+ /**
+ * Run good DDL.
+ * @throws SQLException
+ */
+ private void goodStatement( Connection conn, String ddl ) throws SQLException
+ {
+ PreparedStatement ps = chattyPrepare( conn, ddl );
+
+ ps.execute();
+ ps.close();
+ }
+
+ /**
+ * Prepare a statement and report its sql text.
+ */
+ private PreparedStatement chattyPrepare( Connection conn, String text )
+ throws SQLException
+ {
+ println( "Preparing statement:\n\t" + text );
+
+ return conn.prepareStatement( text );
+ }
+
+ /**
+ * Assert that the statement text, when compiled, raises an exception
+ */
+ private void expectError( String sqlState, String query )
+ {
+ println( "\nExpecting " + sqlState + " when preparing:\n\t" + query );
+
+ assertCompileError( sqlState, query );
+ }
+
+ /**
+ * <p>
+ * Assert whether a routine is expected to be DETERMINISTIC.
+ * </p>
+ */
+ public void assertDeterministic( Connection conn, String routineName, boolean isDeterministic )
+ throws Exception
+ {
+ PreparedStatement ps = conn.prepareStatement
+ (
+ "select a.aliasinfo\n" +
+ "from sys.sysaliases a\n" +
+ "where alias = ?"
+ );
+ ps.setString( 1, routineName );
+ ResultSet rs = ps.executeQuery();
+
+ rs.next();
+ RoutineAliasInfo rai = (RoutineAliasInfo) rs.getObject( 1 );
+
+ assertEquals( isDeterministic, rai.isDeterministic() );
+
+ rs.close();
+ ps.close();
+ }
+
}
\ No newline at end of file
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB.sql
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB.sql?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB.sql (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/tools/dblook_makeDB.sql Fri Oct 3 05:44:34 2008
@@ -71,6 +71,10 @@
create procedure """proc ""In Quotes with spaces""" (INOUT a CHAR(10), IN b int) language java external name 'org.apache.derbyTesting.functionTests.util.ProcedureTest.inoutparams3' parameter style java dynamic result sets 2 modifies sql data;
+create procedure p_deterministic() deterministic language java parameter style java modifies sql data external name 'foo.bar.wibble';
+
+create procedure p_not_deterministic() language java not deterministic parameter style java modifies sql data external name 'foo.bar.wibble';
+
-- ----------------------------------------------
-- Functions.
-- ----------------------------------------------
@@ -79,6 +83,10 @@
create function foo.gatp2(SCH VARCHAR(128), TBL VARCHAR(128)) RETURNS VARCHAR(1000) EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.TestPropertyInfo.getAllTableProperties' LANGUAGE JAVA PARAMETER STYLE JAVA RETURNS NULL ON NULL INPUT;
+create function f_deterministic() returns int language java parameter style java deterministic no sql external name 'foo.bar.wibble';
+
+create function f_not_deterministic() returns int language java parameter style java no sql not deterministic external name 'foo.bar.wibble';
+
-- ----------------------------------------------
-- Tables
-- ----------------------------------------------
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_5.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_5.java?rev=701367&r1=701366&r2=701367&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_5.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/upgradeTests/Changes10_5.java Fri Oct 3 05:44:34 2008
@@ -44,6 +44,8 @@
*/
public class Changes10_5 extends UpgradeChange {
+ private static final String BAD_SYNTAX = "42X01";
+
public Changes10_5(String name) {
super(name);
}
@@ -108,4 +110,75 @@
break;
}
}
+
+ /**
+ * Test that the DETERMINISTIC keyword is not allowed until you
+ * hard-upgrade to 10.5.
+ *
+ */
+ public void testDeterminismKeyword() throws SQLException
+ {
+ String sqlstate = null;
+
+ switch (getPhase())
+ {
+ case PH_SOFT_UPGRADE:
+ sqlstate = SQLSTATE_NEED_UPGRADE;
+ break;
+
+ case PH_POST_SOFT_UPGRADE:
+ sqlstate = BAD_SYNTAX;
+ break;
+
+ case PH_HARD_UPGRADE:
+ sqlstate = null;
+ break;
+
+ default:
+ return;
+ }
+
+ possibleError
+ (
+ sqlstate,
+ "create function f_3570_12()\n" +
+ "returns int\n" +
+ "language java\n" +
+ "parameter style java\n" +
+ "deterministic\n" +
+ "no sql\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ possibleError
+ (
+ sqlstate,
+ "create procedure p_3570_13()\n" +
+ "language java\n" +
+ "not deterministic\n" +
+ "parameter style java\n" +
+ "modifies sql data\n" +
+ "external name 'foo.bar.wibble'\n"
+ );
+ }
+
+ /**
+ * <p>
+ * Run a statement. If the sqlstate is not null, then we expect that error.
+ * </p>
+ */
+ private void possibleError( String sqlstate, String text )
+ throws SQLException
+ {
+ if ( sqlstate != null )
+ {
+ assertCompileError( sqlstate, text );
+ }
+ else
+ {
+ Statement s = createStatement();
+ s.execute( text );
+ s.close();
+ }
+ }
+
}