db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rhille...@apache.org
Subject svn commit: r699009 - in /db/derby/code/trunk/java: engine/org/apache/derby/catalog/types/ engine/org/apache/derby/impl/sql/catalog/ engine/org/apache/derby/impl/sql/compile/ testing/org/apache/derbyTesting/functionTests/tests/lang/
Date Thu, 25 Sep 2008 15:55:35 GMT
Author: rhillegas
Date: Thu Sep 25 08:55:34 2008
New Revision: 699009

URL: http://svn.apache.org/viewvc?rev=699009&view=rev
Log:
DERBY_3570: Introduce determinism field.

Added:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java
  (with props)
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/catalog/DataDictionaryImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.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/tests/lang/_Suite.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=699009&r1=699008&r2=699009&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 Thu
Sep 25 08:55:34 2008
@@ -53,6 +53,10 @@
 	/** PARAMETER STYLE DERBY_JDBC_RESULT_SET */
 	public static final short PS_DERBY_JDBC_RESULT_SET = PS_JAVA + 1;
 
+    /** Masks for the sqlOptions field */
+    private static final short SQL_ALLOWED_MASK = (short) 0xF;
+    private static final short DETERMINISTIC_MASK = (short) 0x10;
+
 	private int parameterCount;
 
     /**
@@ -84,9 +88,13 @@
 	private short parameterStyle;
 
 	/**
-		What SQL is allowed by this procedure.
-	*/
-	private short	sqlAllowed;
+		This field contains several pieces of information:
+
+        bits 0-3    sqlAllowed = MODIFIES_SQL_DATA, READS_SQL_DATA,CONTAINS_SQL, or NO_SQL
+
+        bit 4         on if function is DETERMINISTIC, off otherwise
+    */
+	private short	sqlOptions;
 
 	/**
 		SQL Specific name (future)
@@ -109,10 +117,11 @@
 		Create a RoutineAliasInfo for an internal PROCEDURE.
 	*/
 	public RoutineAliasInfo(String methodName, int parameterCount, String[] parameterNames,
-		TypeDescriptor[]	parameterTypes, int[] parameterModes, int dynamicResultSets, short parameterStyle,
short sqlAllowed) {
+                            TypeDescriptor[]	parameterTypes, int[] parameterModes, int dynamicResultSets,
short parameterStyle, short sqlAllowed,
+                            boolean isDeterministic ) {
 
 		this(methodName, parameterCount, parameterNames, parameterTypes, parameterModes, 
-			dynamicResultSets, parameterStyle, sqlAllowed, true, (TypeDescriptor) null);
+             dynamicResultSets, parameterStyle, sqlAllowed, isDeterministic, true, (TypeDescriptor)
null);
 	}
 
 	/**
@@ -120,7 +129,7 @@
 	*/
 	public RoutineAliasInfo(String methodName, int parameterCount, String[] parameterNames,
 		TypeDescriptor[]	parameterTypes, int[] parameterModes, int dynamicResultSets, short parameterStyle,
short sqlAllowed,
-		boolean calledOnNullInput, TypeDescriptor returnType)
+                            boolean isDeterministic, boolean calledOnNullInput, TypeDescriptor
returnType)
 	{
 
 		super(methodName);
@@ -130,7 +139,8 @@
 		this.parameterModes = parameterModes;
 		this.dynamicResultSets = dynamicResultSets;
 		this.parameterStyle = parameterStyle;
-		this.sqlAllowed = sqlAllowed;
+		this.sqlOptions = (short) (sqlAllowed & SQL_ALLOWED_MASK);
+        if ( isDeterministic ) { this.sqlOptions = (short) (sqlOptions | DETERMINISTIC_MASK);
}
 		this.calledOnNullInput = calledOnNullInput;
 		this.returnType = returnType;
 
@@ -204,9 +214,14 @@
 	}
 
 	public short getSQLAllowed() {
-		return sqlAllowed;
+		return (short) (sqlOptions & SQL_ALLOWED_MASK);
 	}
 
+    public boolean isDeterministic()
+    {
+        return ( (sqlOptions & DETERMINISTIC_MASK) != 0 );
+    }
+
 	public boolean calledOnNullInput() {
 		return calledOnNullInput;
 	}
@@ -239,7 +254,7 @@
 		dynamicResultSets = in.readInt();
 		parameterCount = in.readInt();
 		parameterStyle = in.readShort();
-		sqlAllowed = in.readShort();
+		sqlOptions = in.readShort();
 		returnType = getStoredType(in.readObject());
 		calledOnNullInput = in.readBoolean();
 		in.readInt(); // future expansion.
@@ -295,7 +310,7 @@
 		out.writeInt(dynamicResultSets);
 		out.writeInt(parameterCount);
 		out.writeShort(parameterStyle);
-		out.writeShort(sqlAllowed);
+		out.writeShort(sqlOptions);
 		out.writeObject(returnType);
 		out.writeBoolean(calledOnNullInput);
 		out.writeInt(0); // future expansion

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java?rev=699009&r1=699008&r2=699009&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
(original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/catalog/DataDictionaryImpl.java
Thu Sep 25 08:55:34 2008
@@ -212,42 +212,49 @@
     *[1]    = RETURNS type
     *[2]    = Java class
     *[3]    = method name and signature
-    *[4..N] = arguments (optional, if not present zero arguments is assumed)
+    *[4]    = "true" or "false" depending on whether the function is DETERMINSTIC
+    *[5..N] = arguments (optional, if not present zero arguments is assumed)
 	*
 	*/
 	private static final String[][] SYSFUN_FUNCTIONS = {
-			{"ACOS", "DOUBLE", "java.lang.StrictMath", "acos(double)", "DOUBLE"},
-			{"ASIN", "DOUBLE", "java.lang.StrictMath", "asin(double)", "DOUBLE"},
-			{"ATAN", "DOUBLE", "java.lang.StrictMath", "atan(double)", "DOUBLE"},
-            {"ATAN2", "DOUBLE", "java.lang.StrictMath", "atan2(double,double)", "DOUBLE",
"DOUBLE"},
-			{"COS", "DOUBLE", "java.lang.StrictMath", "cos(double)", "DOUBLE"},
-			{"SIN", "DOUBLE", "java.lang.StrictMath", "sin(double)", "DOUBLE"},
-			{"TAN", "DOUBLE", "java.lang.StrictMath", "tan(double)", "DOUBLE"},
-            {"PI", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "PI()"},
-			{"DEGREES", "DOUBLE", "java.lang.StrictMath", "toDegrees(double)", "DOUBLE"},
-			{"RADIANS", "DOUBLE", "java.lang.StrictMath", "toRadians(double)", "DOUBLE"},
-			{"LN", "DOUBLE", "java.lang.StrictMath", "log(double)", "DOUBLE"},
-			{"LOG", "DOUBLE", "java.lang.StrictMath", "log(double)", "DOUBLE"}, // Same as LN
-			{"LOG10", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "LOG10(double)", "DOUBLE"},
-			{"EXP", "DOUBLE", "java.lang.StrictMath", "exp(double)", "DOUBLE"},
-			{"CEIL", "DOUBLE", "java.lang.StrictMath", "ceil(double)", "DOUBLE"},
-			{"CEILING", "DOUBLE", "java.lang.StrictMath", "ceil(double)", "DOUBLE"}, // Same as CEIL
-			{"FLOOR", "DOUBLE", "java.lang.StrictMath", "floor(double)", "DOUBLE"},
-			{"SIGN", "INTEGER", "org.apache.derby.catalog.SystemProcedures", "SIGN(double)", "DOUBLE"},
-            {"RANDOM", "DOUBLE", "java.lang.StrictMath", "random()"},
-			{"RAND", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "RAND(int)", "INTEGER"},
// Escape function spec.
-			{"COT", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "COT(double)", "DOUBLE"},
-			{"COSH", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "COSH(double)", "DOUBLE"},
-			{"SINH", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "SINH(double)", "DOUBLE"},
-			{"TANH", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "TANH(double)", "DOUBLE"}
+        {"ACOS", "DOUBLE", "java.lang.StrictMath", "acos(double)", "true", "DOUBLE"},
+			{"ASIN", "DOUBLE", "java.lang.StrictMath", "asin(double)",  "true", "DOUBLE"},
+			{"ATAN", "DOUBLE", "java.lang.StrictMath", "atan(double)",  "true", "DOUBLE"},
+            {"ATAN2", "DOUBLE", "java.lang.StrictMath", "atan2(double,double)",  "true",
"DOUBLE", "DOUBLE"},
+			{"COS", "DOUBLE", "java.lang.StrictMath", "cos(double)",  "true", "DOUBLE"},
+			{"SIN", "DOUBLE", "java.lang.StrictMath", "sin(double)",  "true", "DOUBLE"},
+			{"TAN", "DOUBLE", "java.lang.StrictMath", "tan(double)",  "true", "DOUBLE"},
+            {"PI", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "PI()", "true"},
+            {"DEGREES", "DOUBLE", "java.lang.StrictMath", "toDegrees(double)", "true", "DOUBLE"},
+			{"RADIANS", "DOUBLE", "java.lang.StrictMath", "toRadians(double)",  "true", "DOUBLE"},
+			{"LN", "DOUBLE", "java.lang.StrictMath", "log(double)",  "true", "DOUBLE"},
+			{"LOG", "DOUBLE", "java.lang.StrictMath", "log(double)",  "true", "DOUBLE"}, // Same as
LN
+			{"LOG10", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "LOG10(double)",  "true",
"DOUBLE"},
+			{"EXP", "DOUBLE", "java.lang.StrictMath", "exp(double)",  "true", "DOUBLE"},
+			{"CEIL", "DOUBLE", "java.lang.StrictMath", "ceil(double)",  "true", "DOUBLE"},
+			{"CEILING", "DOUBLE", "java.lang.StrictMath", "ceil(double)",  "true", "DOUBLE"}, // Same
as CEIL
+			{"FLOOR", "DOUBLE", "java.lang.StrictMath", "floor(double)",  "true", "DOUBLE"},
+			{"SIGN", "INTEGER", "org.apache.derby.catalog.SystemProcedures", "SIGN(double)",  "true",
"DOUBLE"},
+            {"RANDOM", "DOUBLE", "java.lang.StrictMath", "random()",  "false" },
+			{"RAND", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "RAND(int)",  "false",
"INTEGER"}, // Escape function spec.
+			{"COT", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "COT(double)",  "true",
"DOUBLE"},
+			{"COSH", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "COSH(double)",  "true",
"DOUBLE"},
+			{"SINH", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "SINH(double)",  "true",
"DOUBLE"},
+			{"TANH", "DOUBLE", "org.apache.derby.catalog.SystemProcedures", "TANH(double)",  "true",
"DOUBLE"}
 	};
 	
 
     /**
+     * Index into SYSFUN_FUNCTIONS of the DETERMINISTIC indicator.
+     * Used to determine whether the system function is DETERMINISTIC
+     */
+    private static final int SYSFUN_DETERMINISTIC_INDEX =  4;
+
+    /**
      * The index of the first parameter in entries in the SYSFUN_FUNCTIONS
      * table. Used to determine the parameter count (zero to many).
      */
-    private static final int SYSFUN_FIRST_PARAMETER_INDEX =  4;
+    private static final int SYSFUN_FIRST_PARAMETER_INDEX =  5;
 
 	/**
 	 * Runtime definition of the functions from SYSFUN_FUNCTIONS.
@@ -6788,6 +6795,8 @@
 					TypeDescriptor rt =
 						DataTypeDescriptor.getBuiltInDataTypeDescriptor(details[1]).getCatalogType();
 
+                    boolean isDeterministic = Boolean.valueOf( details[ SYSFUN_DETERMINISTIC_INDEX
] ).booleanValue();
+                    
                     // Determine the number of arguments (could be zero).
                     int paramCount = details.length - SYSFUN_FIRST_PARAMETER_INDEX;
 					TypeDescriptor[] pt = new TypeDescriptor[paramCount];
@@ -6805,7 +6814,7 @@
 					RoutineAliasInfo ai = new RoutineAliasInfo(details[3],
 							paramCount, paramNames,
 							pt, paramModes, 0,
-							RoutineAliasInfo.PS_JAVA, RoutineAliasInfo.NO_SQL,
+                            RoutineAliasInfo.PS_JAVA, RoutineAliasInfo.NO_SQL, isDeterministic,
 							false, rt);
 
 					// details[2] = class name
@@ -9376,6 +9385,8 @@
      *                          CONTAINS_SQL
      *                          NO_SQL
      *
+     * @param isDeterministic True if the procedure/function is DETERMINISTIC
+     *
      * @param return_type   null for procedure.  For functions the return type
      *                      of the function.
      *
@@ -9396,6 +9407,7 @@
 	int						num_out_param,
 	int						num_result_sets,
     short                   routine_sql_control,
+    boolean               isDeterministic,
     TypeDescriptor          return_type,
     TransactionController   tc,
     String procClass)
@@ -9441,6 +9453,7 @@
                                                     //  READS_SQL_DATA
                                                     //  CONTAINS_SQL
                                                     //  NO_SQL
+                isDeterministic,             // whether the procedure/function is DETERMINISTIC
                 true,                               // true - calledOnNullInput
                 return_type);
 
@@ -9488,6 +9501,9 @@
      *                          CONTAINS_SQL
      *                          NO_SQL
      *
+     *
+     * @param isDeterministic True if the procedure/function is DETERMINISTIC
+     *
      * @param return_type   null for procedure.  For functions the return type
      *                      of the function.
      *
@@ -9505,13 +9521,14 @@
     int                     num_out_param,
     int                     num_result_sets,
     short                   routine_sql_control,
+    boolean               isDeterministic,
     TypeDescriptor          return_type,
     TransactionController   tc)
         throws StandardException
     {
         UUID routine_uuid = createSystemProcedureOrFunction(routine_name,
         schema_uuid, arg_names, arg_types,
-        num_out_param, num_result_sets, routine_sql_control,
+        num_out_param, num_result_sets, routine_sql_control, isDeterministic,
         return_type, tc, "org.apache.derby.catalog.SystemProcedures");
         return routine_uuid;
     }
@@ -9569,6 +9586,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9595,6 +9613,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
 
@@ -9611,6 +9630,7 @@
 				0,
 				0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9625,6 +9645,7 @@
 				0,
 				0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9639,6 +9660,7 @@
 				0,
 				0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9662,6 +9684,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9687,6 +9710,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9707,6 +9731,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9727,6 +9752,7 @@
 				0,
 				0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
 
@@ -9749,6 +9775,7 @@
 				0,
 				0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
 
@@ -9780,6 +9807,7 @@
 				0,
 				0,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.VARCHAR, Limits.DB2_VARCHAR_MAXWIDTH),
                 tc);
@@ -9804,6 +9832,7 @@
 				0,
 				0,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 TypeDescriptor.INTEGER,
                 tc);
         }
@@ -9819,6 +9848,7 @@
 				0,
 				0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.VARCHAR, Limits.DB2_VARCHAR_MAXWIDTH),
 
@@ -9861,6 +9891,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9883,6 +9914,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9904,6 +9936,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }	
@@ -9941,6 +9974,7 @@
 				0,
 				0,
 				RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -9976,6 +10010,7 @@
 				0,
 				0,
 				RoutineAliasInfo.READS_SQL_DATA,
+               false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10016,6 +10051,7 @@
 				0,
 				0,
 				RoutineAliasInfo.MODIFIES_SQL_DATA,
+               false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10059,6 +10095,7 @@
 				0,
 				0,
 				RoutineAliasInfo.MODIFIES_SQL_DATA,
+               false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10093,6 +10130,7 @@
 				0,
 				0,
 				RoutineAliasInfo.MODIFIES_SQL_DATA,
+               false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10183,6 +10221,7 @@
 				2,
 				0,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10212,6 +10251,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10241,6 +10281,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10270,6 +10311,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10301,6 +10343,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10333,6 +10376,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10364,6 +10408,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10395,6 +10440,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10426,6 +10472,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10462,6 +10509,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10498,6 +10546,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10523,6 +10572,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10557,6 +10607,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10571,6 +10622,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10732,6 +10784,7 @@
 				0,
 				0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
 
@@ -10779,6 +10832,7 @@
                 0,
                 0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10808,6 +10862,7 @@
                 0,
                 0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10838,6 +10893,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10870,6 +10926,7 @@
 				0,
 				1,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -10904,6 +10961,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 TypeDescriptor.INTEGER,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -10922,6 +10980,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 null,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -10946,6 +11005,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
                 tc,
@@ -10970,6 +11030,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
                 tc,
@@ -10989,6 +11050,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
                 tc,
@@ -11013,6 +11075,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.VARCHAR,
                     LOBStoredProcedure.MAX_RETURN_LENGTH),
@@ -11040,6 +11103,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 null,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -11062,6 +11126,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 null,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -11082,6 +11147,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 TypeDescriptor.INTEGER,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -11100,6 +11166,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 null,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -11124,6 +11191,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
                 tc,
@@ -11148,6 +11216,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
                 tc,
@@ -11169,6 +11238,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.BIGINT),
                 tc,
@@ -11193,6 +11263,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 DataTypeDescriptor.getCatalogType(
                     Types.VARBINARY,
                     LOBStoredProcedure.MAX_RETURN_LENGTH),
@@ -11220,6 +11291,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 null,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -11242,6 +11314,7 @@
                 0,
                 0,
                 RoutineAliasInfo.CONTAINS_SQL,
+                false,
                 null,
                 tc,
                 "org.apache.derby.impl.jdbc.LOBStoredProcedure");
@@ -11281,6 +11354,7 @@
                 0,
                 0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
 
@@ -11353,6 +11427,7 @@
 				0,
 				0,
 				RoutineAliasInfo.READS_SQL_DATA,
+               false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -11393,6 +11468,7 @@
                 0,
                 0,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -11431,6 +11507,7 @@
                0,
                0,
                RoutineAliasInfo.MODIFIES_SQL_DATA,
+               false,
                (TypeDescriptor) null,
                tc);
         }
@@ -11476,6 +11553,7 @@
                 0,
                 0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -11491,6 +11569,7 @@
                 0,
                 0,
                 RoutineAliasInfo.NO_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -11508,6 +11587,7 @@
                 0,
                 0,
                 RoutineAliasInfo.MODIFIES_SQL_DATA,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }
@@ -11524,6 +11604,7 @@
                 0,
                 0,
                 RoutineAliasInfo.READS_SQL_DATA,
+                false,
                 CATALOG_TYPE_SYSTEM_IDENTIFIER,
                 tc);
         }
@@ -11538,6 +11619,7 @@
                 0,
                 0,
                 RoutineAliasInfo.NO_SQL,
+                false,
                 (TypeDescriptor) null,
                 tc);
         }

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java?rev=699009&r1=699008&r2=699009&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java
(original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateAliasNode.java
Thu Sep 25 08:55:34 2008
@@ -52,6 +52,19 @@
 
 public class CreateAliasNode extends DDLStatementNode
 {
+    // indexes into routineElements
+    public static final int PARAMETER_ARRAY = 0;
+    public static final int TABLE_NAME = PARAMETER_ARRAY + 1;
+    public static final int DYNAMIC_RESULT_SET_COUNT = TABLE_NAME + 1;
+    public static final int LANGUAGE = DYNAMIC_RESULT_SET_COUNT + 1;
+    public static final int EXTERNAL_NAME = LANGUAGE + 1;
+    public static final int PARAMETER_STYLE = EXTERNAL_NAME + 1;
+    public static final int SQL_CONTROL = PARAMETER_STYLE + 1;
+    public static final int DETERMINISTIC = SQL_CONTROL + 1;
+    public static final int NULL_ON_NULL_INPUT = DETERMINISTIC + 1;
+    public static final int RETURN_TYPE = NULL_ON_NULL_INPUT + 1;
+    public static final int ROUTINE_ELEMENT_COUNT = RETURN_TYPE + 1;
+    
 	private String				javaClassName;
 	private String				methodName;
 	private char				aliasType; 
@@ -106,11 +119,12 @@
 				// 4 - String external name (also passed directly to create alias node - ignore
 				// 5 - Integer parameter style 
 				// 6 - Short - SQL control
-				// 7 - Boolean - CALLED ON NULL INPUT (always TRUE for procedures)
-				// 8 - TypeDescriptor - return type (always NULL for procedures)
+				// 7 - Boolean - whether the routine is DETERMINISTIC
+				// 8 - Boolean - CALLED ON NULL INPUT (always TRUE for procedures)
+				// 9 - TypeDescriptor - return type (always NULL for procedures)
 
 				Object[] routineElements = (Object[]) aliasSpecificInfo;
-				Object[] parameters = (Object[]) routineElements[0];
+				Object[] parameters = (Object[]) routineElements[PARAMETER_ARRAY];
 				int paramCount = ((Vector) parameters[0]).size();
 				
 				// Support for Java signatures in Derby was added in 10.1
@@ -162,18 +176,21 @@
 					}
 				}
 
-				Integer drso = (Integer) routineElements[2];
+				Integer drso = (Integer) routineElements[DYNAMIC_RESULT_SET_COUNT];
 				int drs = drso == null ? 0 : drso.intValue();
 
 				short sqlAllowed;
-				Short sqlAllowedObject = (Short) routineElements[6];
+				Short sqlAllowedObject = (Short) routineElements[SQL_CONTROL];
 				if (sqlAllowedObject != null)
 					sqlAllowed = sqlAllowedObject.shortValue();
 				else
 					sqlAllowed = (this.aliasType == AliasInfo.ALIAS_TYPE_PROCEDURE_AS_CHAR ?
 					RoutineAliasInfo.MODIFIES_SQL_DATA : RoutineAliasInfo.READS_SQL_DATA);
 
-				Boolean calledOnNullInputO = (Boolean) routineElements[7];
+				Boolean isDeterministicO = (Boolean) routineElements[DETERMINISTIC];
+                boolean isDeterministic = (isDeterministicO == null) ? false : isDeterministicO.booleanValue();
+
+				Boolean calledOnNullInputO = (Boolean) routineElements[NULL_ON_NULL_INPUT];
 				boolean calledOnNullInput;
 				if (calledOnNullInputO == null)
 					calledOnNullInput = true;
@@ -181,8 +198,8 @@
 					calledOnNullInput = calledOnNullInputO.booleanValue();
 
 				aliasInfo = new RoutineAliasInfo(this.methodName, paramCount, names, types, modes, drs,
-						((Short) routineElements[5]).shortValue(),	// parameter style
-						sqlAllowed, calledOnNullInput, (TypeDescriptor) routineElements[8]);
+						((Short) routineElements[PARAMETER_STYLE]).shortValue(),	// parameter style
+                        sqlAllowed, isDeterministic, calledOnNullInput, (TypeDescriptor)
routineElements[RETURN_TYPE]);
 
 				implicitCreateSchema = true;
 				}

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=699009&r1=699008&r2=699009&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 Thu Sep
25 08:55:34 2008
@@ -53,6 +53,7 @@
 import	org.apache.derby.impl.sql.compile.CastNode;
 import org.apache.derby.impl.sql.compile.ColumnDefinitionNode;
 import org.apache.derby.impl.sql.compile.ColumnReference;
+import org.apache.derby.impl.sql.compile.CreateAliasNode;
 import org.apache.derby.impl.sql.compile.CursorNode;
 import org.apache.derby.impl.sql.compile.FromBaseTable;
 import org.apache.derby.impl.sql.compile.FromList;
@@ -166,7 +167,7 @@
 {
 	private static final String[] SAVEPOINT_CLAUSE_NAMES = {"UNIQUE", "ON ROLLBACK RETAIN LOCKS",
"ON ROLLBACK RETAIN CURSORS"};
 	private static final String[] ROUTINE_CLAUSE_NAMES =
-		{null, "SPECIFIC", "RESULT SET", "LANGUAGE", "EXTERNAL NAME", "PARAMETER STYLE", "SQL",
"ON NULL INPUT"};
+		{null, "SPECIFIC", "RESULT SET", "LANGUAGE", "EXTERNAL NAME", "PARAMETER STYLE", "SQL",
"DETERMINISTIC", "ON NULL INPUT"};
 	/**
 	   Clauses required for Java routines. Numbers correspond
 	   to offsets in ROUTINE_CLAUSE_NAMES.
@@ -174,7 +175,7 @@
 	   4 - "EXTERNAL NAME"
 	   5 - "PARAMETER STYLE"
 	*/
-	private static final int[] JAVA_ROUTINE_CLAUSES = {3,4,5};
+	private static final int[] JAVA_ROUTINE_CLAUSES = {CreateAliasNode.LANGUAGE,CreateAliasNode.EXTERNAL_NAME,CreateAliasNode.PARAMETER_STYLE};
 	private static final String[] TEMPORARY_TABLE_CLAUSE_NAMES = {"NOT LOGGED", "ON COMMIT",
"ON ROLLBACK"};
 	/* The default length of a char or bit if the length is omitted */
 	private static final int	DEFAULT_STRING_COLUMN_LENGTH = 1;
@@ -9988,7 +9989,7 @@
 procedureDefinition() throws StandardException :
 {
 	TableName procedureName;
-	Object[] procedureElements = new Object[9];
+	Object[] procedureElements = new Object[CreateAliasNode.ROUTINE_ELEMENT_COUNT];
 }
 {
 		<PROCEDURE> procedureName = qualifiedName(Limits.MAX_IDENTIFIER_LENGTH)
@@ -9999,7 +10000,7 @@
 
 			return getCreateAliasNode(
 							procedureName,
-							(String) procedureElements[4],
+							(String) procedureElements[ CreateAliasNode.EXTERNAL_NAME ],
 							procedureElements,
 							AliasInfo.ALIAS_TYPE_PROCEDURE_AS_CHAR,
 							Boolean.FALSE);
@@ -10015,32 +10016,32 @@
 {
 	(
 		<SPECIFIC> clauseValue = qualifiedName(Limits.MAX_IDENTIFIER_LENGTH)
-			{ clausePosition = 1; throw StandardException.newException(SQLState.NOT_IMPLEMENTED, "SPECIFIC
identifier");}
+			{ clausePosition = CreateAliasNode.TABLE_NAME; throw StandardException.newException(SQLState.NOT_IMPLEMENTED,
"SPECIFIC identifier");}
 	|
 		[ <DYNAMIC> ] <RESULT> <SETS> drs = uint_value()
 		{
 			if (!isProcedure)
 				throw StandardException.newException(SQLState.LANG_SYNTAX_ERROR, "RESULT SETS");
-			clauseValue = ReuseFactory.getInteger(drs); clausePosition = 2;
+			clauseValue = ReuseFactory.getInteger(drs); clausePosition = CreateAliasNode.DYNAMIC_RESULT_SET_COUNT;
 		}
 	|
-		<LANGUAGE>  <JAVA> { clauseValue = "JAVA"; clausePosition = 3; }
+		<LANGUAGE>  <JAVA> { clauseValue = "JAVA"; clausePosition = CreateAliasNode.LANGUAGE;
}
 	|
-		<EXTERNAL> <NAME> clauseValue = string() { clausePosition = 4; }
+		<EXTERNAL> <NAME> clauseValue = string() { clausePosition = CreateAliasNode.EXTERNAL_NAME;
}
 	|
-		<PARAMETER> <STYLE> clauseValue = parameterStyle( isTableFunction ) { clausePosition
= 5; }
+		<PARAMETER> <STYLE> clauseValue = parameterStyle( isTableFunction ) { clausePosition
= CreateAliasNode.PARAMETER_STYLE; }
 
-	|	<NO> <SQL>				{ clauseValue = ReuseFactory.getShort(RoutineAliasInfo.NO_SQL);
clausePosition = 6; }
-	|	<CONTAINS> <SQL>		{ clauseValue = ReuseFactory.getShort(RoutineAliasInfo.CONTAINS_SQL);
clausePosition = 6; }
-	|	<READS> <SQL> <DATA>	{ clauseValue = ReuseFactory.getShort(RoutineAliasInfo.READS_SQL_DATA);
clausePosition = 6; }
+	|	<NO> <SQL>				{ clauseValue = ReuseFactory.getShort(RoutineAliasInfo.NO_SQL);
clausePosition = CreateAliasNode.SQL_CONTROL; }
+	|	<CONTAINS> <SQL>		{ clauseValue = ReuseFactory.getShort(RoutineAliasInfo.CONTAINS_SQL);
clausePosition = CreateAliasNode.SQL_CONTROL; }
+	|	<READS> <SQL> <DATA>	{ clauseValue = ReuseFactory.getShort(RoutineAliasInfo.READS_SQL_DATA);
clausePosition = CreateAliasNode.SQL_CONTROL; }
 	|	<MODIFIES> <SQL> <DATA>
 		{
 			if (!isProcedure)
 				throw StandardException.newException(SQLState.LANG_SYNTAX_ERROR, "MODIFIES SQL DATA");
-			clauseValue = ReuseFactory.getShort(RoutineAliasInfo.MODIFIES_SQL_DATA); clausePosition
= 6;
+			clauseValue = ReuseFactory.getShort(RoutineAliasInfo.MODIFIES_SQL_DATA); clausePosition
= CreateAliasNode.SQL_CONTROL;
 		}
 
-	|   clauseValue = calledOnNullInput(isProcedure) { clausePosition = 7; }
+	|   clauseValue = calledOnNullInput(isProcedure) { clausePosition = CreateAliasNode.NULL_ON_NULL_INPUT;
}
 	)
 
 	{
@@ -10177,7 +10178,7 @@
 {
 	TableName functionName;
 	TypeDescriptor  returnType;
-	Object[] functionElements = new Object[9];
+	Object[] functionElements = new Object[CreateAliasNode.ROUTINE_ELEMENT_COUNT];
 }
 {
 		<FUNCTION> functionName = qualifiedName(Limits.MAX_IDENTIFIER_LENGTH)
@@ -10185,12 +10186,12 @@
 		<RETURNS> returnType = functionReturnDataType() 
 		( routineElement(false, returnType.isRowMultiSet(), functionElements) ) +
 		{
-		    functionElements[8] = returnType;
+		    functionElements[CreateAliasNode.RETURN_TYPE] = returnType;
 		    checkRequiredRoutineClause(JAVA_ROUTINE_CLAUSES, functionElements);
 		    
 			return getCreateAliasNode(
 							functionName,
-							(String) functionElements[4],
+							(String) functionElements[CreateAliasNode.EXTERNAL_NAME],
 							functionElements,
 							AliasInfo.ALIAS_TYPE_FUNCTION_AS_CHAR,
 							Boolean.FALSE);

Added: 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=699009&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java
(added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java
Thu Sep 25 08:55:34 2008
@@ -0,0 +1,174 @@
+/*
+
+   Derby - Class org.apache.derbyTesting.functionTests.tests.lang.GeneratedColumnsTest
+
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to you under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+ */
+
+package org.apache.derbyTesting.functionTests.tests.lang;
+
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Connection;
+import java.sql.Statement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.DriverManager;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.DatabasePropertyTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.TestConfiguration;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+
+import org.apache.derby.catalog.types.RoutineAliasInfo;
+
+/**
+ * <p>
+ * Test generated columns. See DERBY-481.
+ * </p>
+ */
+public class GeneratedColumnsTest extends BaseJDBCTestCase
+{
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // CONSTANTS
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // STATE
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // CONSTRUCTOR
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+
+    /**
+     * Create a new instance.
+     */
+
+    public GeneratedColumnsTest(String name)
+    {
+        super(name);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // JUnit BEHAVIOR
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+
+    /**
+     * Construct top level suite in this JUnit test
+     */
+    public static Test suite()
+    {
+        TestSuite suite = (TestSuite) TestConfiguration.embeddedSuite(GeneratedColumnsTest.class);
+
+        return new CleanDatabaseTestSetup( suite );
+    }
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // SUCCESSFUL RESOLUTIONS
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+    /**
+     * <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.
+     *
+     * Also test that, by default, user-defined routines are created as NOT DETERMINISTIC.
+     * </p>
+     */
+    public  void    test_001_determinism_of_stored_system_routines()
+        throws Exception
+    {
+        Connection  conn = getConnection();
+
+        //
+        // Create a user-defined function and procedure and verify
+        // that they too are NOT DETERMINISTIC.
+        // 
+        PreparedStatement functionCreate = conn.prepareStatement
+            (
+             "create function f1()\n" +
+             "returns int\n" +
+             "language java\n" +
+             "parameter style java\n" +
+             "no sql\n" +
+             "external name 'foo.bar.wibble'\n"
+             );
+        functionCreate.execute();
+        functionCreate.close();
+
+        PreparedStatement procedureCreate = conn.prepareStatement
+            (
+             "create procedure p1()\n" +
+             "language java\n" +
+             "parameter style java\n" +
+             "modifies sql data\n" +
+             "external name 'foo.bar.wibble'\n"
+             );
+        procedureCreate.execute();
+        procedureCreate.close();
+
+        //
+        // OK, now verify that all routines in the catalogs are NOT DETERMINISTIC 
+        //
+        PreparedStatement   ps = conn.prepareStatement
+            (
+             "select s.schemaname, a.alias, a.aliastype, a.systemalias, a.aliasinfo\n" +
+             "from sys.sysschemas s, sys.sysaliases a\n" +
+             "where s.schemaid = a.schemaid\n" +
+             "order by s.schemaname, a.alias\n"
+             );
+        ResultSet               rs = ps.executeQuery();
+
+        while ( rs.next() )
+        {
+            String    aliasName = rs.getString( 2 );
+            boolean isSystemAlias = rs.getBoolean( 4 );
+
+            RoutineAliasInfo    rai = (RoutineAliasInfo) rs.getObject( 5 );
+
+            assertFalse( aliasName, rai.isDeterministic() );
+        }
+
+        rs.close();
+        ps.close();
+    }
+
+
+    ///////////////////////////////////////////////////////////////////////////////////
+    //
+    // MINIONS
+    //
+    ///////////////////////////////////////////////////////////////////////////////////
+
+}
\ No newline at end of file

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/GeneratedColumnsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java?rev=699009&r1=699008&r2=699009&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
(original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
Thu Sep 25 08:55:34 2008
@@ -177,6 +177,7 @@
         suite.addTest(ConstantExpressionTest.suite());
         suite.addTest(OptimizerOverridesTest.suite());
         suite.addTest(PrecedenceTest.suite());
+        suite.addTest(GeneratedColumnsTest.suite());
 
         return suite;
 	}



Mime
View raw message