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 dj...@apache.org on 2008/02/01 22:46:44 UTC

svn commit: r617665 - in /db/derby/code/trunk/java/engine/org/apache/derby: catalog/types/ iapi/types/ impl/load/ impl/sql/compile/

Author: djd
Date: Fri Feb  1 13:46:33 2008
New Revision: 617665

URL: http://svn.apache.org/viewvc?rev=617665&view=rev
Log:
DERBY-2775 DERBY-2917 (partial) Remove final set method (setCollationType) on TypeDescriptor to make TypeDescriptor and DataTypeDescriptor logically immutable. Required cleanup to ensure that a routine definition is only passed catalog types (TypeDescriptor) and also resulted in a cleanup of CreateAliasNode by encapsulating collation changes within the type system and RoutineAliasInfo. Also required that the tyep system use a valid JDBC Types constant for the XML type, using the Types.SQLXML from JDBC4.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/RoutineAliasInfo.java
    db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeUtilities.java
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/load/ColumnInfo.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryOperatorNode.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/QueryTreeNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnaryOperatorNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/sqlgrammar.jj

Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/BaseTypeIdImpl.java Fri Feb  1 13:46:33 2008
@@ -35,6 +35,7 @@
 import org.apache.derby.iapi.services.i18n.MessageService;
 
 import org.apache.derby.iapi.services.i18n.MessageService;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.reference.SQLState;
 
 import org.apache.derby.iapi.services.info.JVMInfo;
@@ -391,11 +392,7 @@
 
           case StoredFormatIds.XML_TYPE_ID_IMPL:
                 SQLTypeName = TypeId.XML_NAME;
-                // RESOLVE: There isn't a JDBC type for XML, so we
-                // just use our internal type.  Is it okay to do this,
-                // or should "JDBCTypeId" be renamed since it no longer
-                // just holds JDBC types?
-                JDBCTypeId = StoredFormatIds.XML_TYPE_ID;
+                JDBCTypeId = JDBC40Translation.SQLXML;
                 wrapperTypeFormatId = StoredFormatIds.XML_TYPE_ID;
                 break;
 

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=617665&r1=617664&r2=617665&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 Feb  1 13:46:33 2008
@@ -32,6 +32,7 @@
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.types.DataTypeDescriptor;
 
 /**
  * Describe a routine (procedure or function) alias.
@@ -57,6 +58,10 @@
 
 	private int parameterCount;
 
+    /**
+     * Types of the parameters. If there are no parameters
+     * then this may be null (or a zero length array).
+     */
 	private TypeDescriptor[]	parameterTypes;
         /**
          * Name of each parameter. As of DERBY 10.3, parameter names
@@ -156,6 +161,7 @@
 			}
 
 			if (returnType != null) {
+                SanityManager.ASSERT(!(returnType instanceof DataTypeDescriptor));
 				if (!((sqlAllowed >= RoutineAliasInfo.READS_SQL_DATA) && (sqlAllowed <= RoutineAliasInfo.NO_SQL))) {
 					SanityManager.THROWASSERT("Invalid sqlAllowed for FUNCTION " + methodName + " " + sqlAllowed);
 				}
@@ -172,6 +178,10 @@
 		return parameterCount;
 	}
 
+    /**
+     * Types of the parameters. If there are no parameters
+     * then this may return null (or a zero length array).
+     */
 	public TypeDescriptor[] getParameterTypes() {
 		return parameterTypes;
 	}
@@ -360,4 +370,22 @@
 			return "UNKNOWN";
 		}
 	}
+    
+    /**
+     * Set the collation type of all string types declared for
+     * use in this routine to the given collation type.
+     * @param collationType
+     */
+    public void setCollationTypeForAllStringTypes(int collationType)
+    {
+        if (parameterCount != 0)
+        {
+            for (int p = 0; p < parameterTypes.length; p++)
+                parameterTypes[p] = DataTypeDescriptor.getCatalogType(
+                        parameterTypes[p], collationType);
+        }
+        
+        if (returnType != null)
+            returnType = DataTypeDescriptor.getCatalogType(returnType, collationType);
+    }
 }

Modified: db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/catalog/types/TypeDescriptorImpl.java Fri Feb  1 13:46:33 2008
@@ -407,7 +407,6 @@
 		return collationType;
 	}
 
-	/** @see DataTypeDescriptor#setCollationType(int) */
 	public void	setCollationType(int collationTypeValue)
 	{
 		collationType = collationTypeValue;

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java Fri Feb  1 13:46:33 2008
@@ -151,6 +151,29 @@
     {
         return getBuiltInDataTypeDescriptor(jdbcType).getCatalogType();
     }
+    
+    /**
+     * Get a catlog type identical to the passed in type exception
+     * that the collationType is set to the passed in value.
+     * @param catalogType Type to be based upon.
+     * @param collationType Collation type of returned type.
+     * 
+     * @return catalogType if it already has the correct collation,
+     * otherwise a new TypeDescriptor with the correct collation.
+     */
+    public static TypeDescriptor getCatalogType(TypeDescriptor catalogType,
+            int collationType)
+    {
+        if (catalogType.isRowMultiSet())
+            return getRowMultiSetCollation(catalogType, collationType);
+        
+        if (catalogType.getCollationType() == collationType)
+            return catalogType;
+        
+        // Create through a runtime type, derivation will be thrown away.
+        return getType(catalogType).getCollatedType(collationType,
+                StringDataValue.COLLATION_DERIVATION_IMPLICIT).getCatalogType();
+    }
 
 	/**
 	 * Get a descriptor that corresponds to a builtin JDBC type.
@@ -330,16 +353,9 @@
 	 *
 	 * @return	A new DataTypeDescriptor describing the SQL Row Multiset
 	 */
-	public static TypeDescriptor getRowMultiSet
-	(
-		String[]	                        columnNames,
-		DataTypeDescriptor[]	types
-	)
-	{
-        TypeDescriptor[] catalogTypes =
-            new TypeDescriptor[types.length];
-        for (int i = 0; i < types.length; i++)
-            catalogTypes[i] = types[i].getCatalogType();
+    public static TypeDescriptor getRowMultiSet(String[] columnNames,
+            TypeDescriptor[] catalogTypes)
+    {
 		RowMultiSetImpl rms = new RowMultiSetImpl(columnNames, catalogTypes);
 		TypeId              typeID = new TypeId( StoredFormatIds.ROW_MULTISET_CATALOG_ID, rms );
 
@@ -1140,12 +1156,18 @@
     /**
      * Return a type description identical to this type
      * with the exception that its collation information is
-     * taken from the passed in information.
+     * taken from the passed in information. If the type
+     * does not represent a string type then the collation
+     * will be unchanged and this is returned.
+     * 
     * @return This if collation would be unchanged otherwise a new type.
      */   
     public DataTypeDescriptor getCollatedType(int collationType,
             int collationDerivation)
-    {
+    {        
+        if (!typeDescriptor.isStringType())
+            return this;
+        
         if ((getCollationType() == collationType) &&
             (getCollationDerivation() == collationDerivation))
             return this;
@@ -1153,6 +1175,57 @@
         return new DataTypeDescriptor(this,
                 collationType,
                 collationDerivation);
+    }
+    
+    /**
+     * For a row multi set type return an identical type
+     * with the collation type changed. Note that since
+     * row types are only ever catalog types the
+     * derivation is not used (since derivation is a property
+     * of runtime types).
+     * <BR>
+     * 
+     * 
+     * @param collationType
+     * @return this  will be returned if no changes are required (e.g.
+     * no string types or collation is already correct), otherwise a
+     * new instance is returned (leaving this unchanged).
+     */
+    private static TypeDescriptor getRowMultiSetCollation(
+            TypeDescriptor catalogType, int collationType)
+    {
+        TypeDescriptor[] rowTypes = catalogType.getRowTypes();
+        
+        TypeDescriptor[] newTypes = null;
+        
+        for (int t = 0; t < rowTypes.length; t++)
+        {
+            TypeDescriptor newType = DataTypeDescriptor.getCatalogType(
+                    rowTypes[t], collationType);
+            
+            // Is it the exact same as the old type.
+            if (newType == rowTypes[t])
+                continue;
+            
+            if (newTypes == null)
+            {
+                // First different type, simply create a new
+                // array and copy all the old types across.
+                // Any new type will overwrite the old type.
+                newTypes = new TypeDescriptor[rowTypes.length];
+                System.arraycopy(rowTypes, 0, newTypes, 0, rowTypes.length);
+            }
+            
+            newTypes[t] = newType;
+        }
+        
+        // If no change then we continue to use this instance.
+        if (newTypes == null)
+            return catalogType;
+        
+        return DataTypeDescriptor.getRowMultiSet(
+                catalogType.getRowColumnNames(),
+                newTypes);
     }
 
 	/**

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeUtilities.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeUtilities.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeUtilities.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeUtilities.java Fri Feb  1 13:46:33 2008
@@ -24,6 +24,7 @@
 import org.apache.derby.iapi.error.StandardException;
 
 import org.apache.derby.iapi.reference.JDBC30Translation;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.services.io.StoredFormatIds;
 
 import java.sql.Types;
@@ -51,7 +52,7 @@
 		case Types.VARBINARY:
 		case Types.LONGVARBINARY:
 		case Types.BLOB:
-		case StoredFormatIds.XML_TYPE_ID:
+		case JDBC40Translation.SQLXML:
 				return dtd.getMaximumWidth();
 			case Types.SMALLINT:
 				return 5;
@@ -105,7 +106,7 @@
 		          typeId == Types.VARCHAR ||
 		          typeId == Types.CLOB ||
 		          typeId == Types.LONGVARCHAR ||
-		          typeId == StoredFormatIds.XML_TYPE_ID);
+		          typeId == JDBC40Translation.SQLXML);
 	}
 	/**
 		Is the data type nullable.

Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/TypeId.java Fri Feb  1 13:46:33 2008
@@ -44,6 +44,7 @@
 
 import org.apache.derby.iapi.reference.JDBC20Translation;
 import org.apache.derby.iapi.reference.JDBC30Translation;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 
 import java.sql.Types;
 
@@ -411,7 +412,7 @@
 
                   // XML is not a JDBC type, so we have to check for our
                   // internal XML type.
-                  case StoredFormatIds.XML_TYPE_ID:
+                  case JDBC40Translation.SQLXML:
                       ret = XML_ID;
                       if (ret == null)
                           ret = XML_ID = new TypeId(StoredFormatIds.XML_TYPE_ID,
@@ -506,7 +507,7 @@
                 }
                 else if (javaTypeName.equals("org.apache.derby.iapi.types.XML"))
                 {
-                        return getBuiltInTypeId(StoredFormatIds.XML_TYPE_ID);
+                        return getBuiltInTypeId(JDBC40Translation.SQLXML);
                 }
                 else
                 {

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/load/ColumnInfo.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/load/ColumnInfo.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/load/ColumnInfo.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/load/ColumnInfo.java Fri Feb  1 13:46:33 2008
@@ -21,6 +21,7 @@
 
 package org.apache.derby.impl.load;
 
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.services.io.StoredFormatIds;
 
 import java.sql.ResultSet;
@@ -211,7 +212,7 @@
 		return !(type == java.sql.Types.BIT ||
 				 type == java.sql.Types.JAVA_OBJECT ||
 				 type == java.sql.Types.OTHER ||
-				 type == StoredFormatIds.XML_TYPE_ID); 
+				 type == JDBC40Translation.SQLXML); 
 	}
 
 

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryOperatorNode.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/BinaryOperatorNode.java Fri Feb  1 13:46:33 2008
@@ -42,6 +42,7 @@
 import org.apache.derby.iapi.store.access.Qualifier;
 
 import org.apache.derby.iapi.reference.ClassName;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.reference.SQLState;
 
 import org.apache.derby.iapi.util.JBitSet;
@@ -394,7 +395,7 @@
         // XML data value, per SQL/XML spec 6.17: "...yielding a value
         // X1 of an XML type."
             setType(DataTypeDescriptor.getBuiltInDataTypeDescriptor(
-                StoredFormatIds.XML_TYPE_ID));
+                    JDBC40Translation.SQLXML));
         }
 
         return genSQLJavaSQLTree();

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=617665&r1=617664&r2=617665&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 Fri Feb  1 13:46:33 2008
@@ -262,73 +262,6 @@
 		}
 		return false;		
 	}
-	
-	/**
-	 * Take the passed TypeDescriptor and check if it corresponds to a 
-	 * character string type. If yes, then create a new one based on it's 
-	 * typeid, length and nullability to create a new DataTypeDescriptor and 
-	 * then have it take the collation type of the schema in which the method 
-	 * is getting defined in. This is because all the character strings 
-	 * associated with the definition of the user defined function/procedure 
-	 * should take the collation of the schema in which this user defined 
-	 * function is getting created.
-	 * 
-	 * @param changeTD TypeDescriptor with incorrect collation setting
-	 * @return New TypeDescriptor with collation of the schema in which 
-	 *   the function/procedure is getting created.
-	 * @throws StandardException
-	 */
-	private TypeDescriptor typeDescriptorWithCorrectCollation(TypeDescriptor changeTD)
-	throws StandardException {
-		//We could have been called for the return type but for procedures 
-		//there is no return type and hence we should be careful that we
-		//don't run into null ptr exception. So before doing anything, check if
-		//the passed parameter is null and if so, then simply return.
-		if (changeTD == null) 
-			return changeTD;
-        
-		TypeId compTypeId = TypeId.getBuiltInTypeId(changeTD.getTypeName());
-		//No work to do if type id does not correspond to a character string
-		if (compTypeId != null && compTypeId.isStringTypeId()) {
-			DataTypeDescriptor newTDWithCorrectCollation = 
-				new DataTypeDescriptor(compTypeId, 
-						changeTD.isNullable(),
-						changeTD.getMaximumWidth());
-			//Use the collation type and info of the schema in which this
-			//function is defined for the return value of the function
-            newTDWithCorrectCollation =
-                newTDWithCorrectCollation.getCollatedType(
-					getSchemaDescriptor().getCollationType(),
-                    StringDataValue.COLLATION_DERIVATION_IMPLICIT);
-			return newTDWithCorrectCollation.getCatalogType();
-		}
-		return changeTD;
-	}
-	
-	/**
-	 * Set the collation of the columns in a Table Function's returned row set.
-	 */
-	private void    setTableFunctionCollations()
-        throws StandardException
-    {
-		if ( aliasInfo.isTableFunction() )
-        {
-            RoutineAliasInfo    info = (RoutineAliasInfo) aliasInfo;
-            TypeDescriptor[]    types = info.getReturnType().getRowTypes();
-
-            SchemaDescriptor    sd = getSchemaDescriptor();
-
-            for ( int i = 0; i < types.length; i++ )
-            {
-                TypeDescriptorImpl  tdi = (TypeDescriptorImpl) types[ i ];
-                if ( tdi.isStringType() )
-                {
-                    tdi.setCollationType( sd.getCollationType() );
-                }
-            }
-        }
-
-    }
     
 	// We inherit the generate() method from DDLStatementNode.
 
@@ -347,41 +280,13 @@
 		//Are we dealing with user defined function or procedure?
 		if (aliasType == AliasInfo.ALIAS_TYPE_FUNCTION_AS_CHAR ||
 				aliasType == AliasInfo.ALIAS_TYPE_PROCEDURE_AS_CHAR) {
-			//Does the user defined function/procedure have any character 
-			//string types in it's definition
-			if (anyStringTypeDescriptor()){
-				RoutineAliasInfo oldAliasInfo = (RoutineAliasInfo)aliasInfo;  
-				TypeDescriptor[] newParamTypes = null;
-				int paramCount = oldAliasInfo.getParameterCount();
-				//Does the user defined functio has any parameters to it?
-				if (paramCount > 0) {
-					newParamTypes = new TypeDescriptor[paramCount];
-					TypeDescriptor[] oldParamTypes = oldAliasInfo.getParameterTypes();
-					//Go through the parameters and pick the character string
-					//type and set their collation to the collation of the
-					//schema in which the function/procedure is getting defined.
-					for (int i = 0; i < paramCount; i++) 
-						newParamTypes[i] = typeDescriptorWithCorrectCollation(oldParamTypes[i]);
-				}
-				//Now create the RoutineAliasInfo again with it's character
-				//strings associated with correct collation type
-				aliasInfo = new RoutineAliasInfo(
-						oldAliasInfo.getMethodName(),
-						oldAliasInfo.getParameterCount(),
-						oldAliasInfo.getParameterNames(), 
-						newParamTypes, 
-						oldAliasInfo.getParameterModes(), 
-						oldAliasInfo.getMaxDynamicResultSets(),
-						oldAliasInfo.getParameterStyle(),
-						oldAliasInfo.getSQLAllowed(),
-						oldAliasInfo.calledOnNullInput(), 
-						typeDescriptorWithCorrectCollation(oldAliasInfo.getReturnType()));
-
-            }
             
-            // if this is a table function, then force its string columns to
-            // have the correct collation.
-            setTableFunctionCollations();
+            // Set the collation for all string types in parameters
+            // and return types including row multi-sets to be that of
+            // the schema the routine is being defined in.
+            ((RoutineAliasInfo)aliasInfo).setCollationTypeForAllStringTypes(
+                    getSchemaDescriptor().getCollationType());
+
 		}
 		// Procedures and functions do not check class or method validity until
 		// runtime execution. Synonyms do need some validity checks.

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java Fri Feb  1 13:46:33 2008
@@ -27,6 +27,7 @@
 import org.apache.derby.catalog.types.SynonymAliasInfo;
 import org.apache.derby.iapi.error.StandardException;
 import org.apache.derby.iapi.reference.ClassName;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.reference.SQLState;
 import org.apache.derby.iapi.services.classfile.VMOpcode;
 import org.apache.derby.iapi.services.compiler.MethodBuilder;
@@ -824,7 +825,7 @@
               constantNodeType = C_NodeTypes.BLOB_CONSTANT_NODE;
 			break;
 
-		  case StoredFormatIds.XML_TYPE_ID:
+		  case JDBC40Translation.SQLXML:
               constantNodeType = C_NodeTypes.XML_CONSTANT_NODE;
 			break;
             

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/TypeCompilerFactoryImpl.java Fri Feb  1 13:46:33 2008
@@ -29,6 +29,7 @@
 
 import org.apache.derby.iapi.reference.JDBC20Translation;
 import org.apache.derby.iapi.reference.JDBC30Translation;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 
 import org.apache.derby.iapi.services.io.StoredFormatIds;
 import java.util.Properties;
@@ -219,7 +220,7 @@
                                 return btc;
                         }
 
-                  case StoredFormatIds.XML_TYPE_ID:
+                  case JDBC40Translation.SQLXML:
                         return xmlTypeCompiler =
                                 getAnInstance(PACKAGE_NAME + "XMLTypeCompiler",
                                                                 xmlTypeCompiler,

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnaryOperatorNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnaryOperatorNode.java?rev=617665&r1=617664&r2=617665&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnaryOperatorNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnaryOperatorNode.java Fri Feb  1 13:46:33 2008
@@ -28,6 +28,7 @@
 
 import org.apache.derby.iapi.sql.dictionary.DataDictionary;
 
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.reference.SQLState;
 import org.apache.derby.iapi.reference.ClassName;
 import org.apache.derby.iapi.error.StandardException;
@@ -390,7 +391,7 @@
 
         // The result type of XMLParse() is always an XML type.
         setType(DataTypeDescriptor.getBuiltInDataTypeDescriptor(
-            StoredFormatIds.XML_TYPE_ID));
+                JDBC40Translation.SQLXML));
     }
 
     /**

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=617665&r1=617664&r2=617665&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 Feb  1 13:46:33 2008
@@ -131,6 +131,7 @@
 import org.apache.derby.iapi.reference.Property;
 import org.apache.derby.iapi.reference.SQLState;
 import org.apache.derby.iapi.reference.JDBC30Translation;
+import org.apache.derby.iapi.reference.JDBC40Translation;
 import org.apache.derby.iapi.reference.Limits;
 
 import org.apache.derby.iapi.sql.compile.CompilerContext;
@@ -3733,6 +3734,22 @@
 	}
 }
 
+/**
+   Returns  a dataTypeDDL() as a catalog type, ie.
+   the Java interface TypeDescriptor.
+*/
+TypeDescriptor
+catalogType() throws StandardException :
+{
+	DataTypeDescriptor	typeDescriptor;
+}
+{
+	typeDescriptor = dataTypeDDL()
+	{
+		return typeDescriptor.getCatalogType();
+	}
+}
+
 
 /*
  * <A NAME="dataTypeCast">dataTypeCast</A>
@@ -4217,7 +4234,7 @@
 	{
 		checkVersion(DataDictionary.DD_VERSION_DERBY_10_1, "XML");
 		return DataTypeDescriptor.getBuiltInDataTypeDescriptor(
-			StoredFormatIds.XML_TYPE_ID);
+			JDBC40Translation.SQLXML);
 	}
 }
 
@@ -10093,10 +10110,10 @@
 	[   LOOKAHEAD( { commonDatatypeName(2, false) })
 	    parameterName = identifier(Limits.MAX_IDENTIFIER_LENGTH, true)
 	]
-	typeDescriptor = dataTypeDDL() 
+	typeDescriptor = dataTypeDDL()
 	{
 		list[0].addElement(parameterName);
-		list[1].addElement(typeDescriptor);
+		list[1].addElement(typeDescriptor.getCatalogType());
 		list[2].addElement(inout);
 	}
 }
@@ -10182,7 +10199,6 @@
 {
 	DataTypeDescriptor	typeDescriptor;
 	String				parameterName = "";
-	Integer				inout;
 }
 {
 	// Lookahead needed because token could satisfy identifier and dataTypeDDL
@@ -10192,11 +10208,12 @@
 	typeDescriptor = dataTypeDDL() 
 	{
 		list[0].addElement(parameterName);
-		list[1].addElement(typeDescriptor);
+		list[1].addElement(typeDescriptor.getCatalogType());
 		list[2].addElement(ReuseFactory.getInteger(JDBC30Translation.PARAMETER_MODE_IN));
 	}
 }
 
+
 /*
  * <A NAME="functionReturnDataType">functionReturnDataType</A>
  */
@@ -10207,7 +10224,7 @@
 }
 {
     (
-        typeDescriptor = dataTypeCommon()
+        typeDescriptor = catalogType()
          |
         typeDescriptor = functionTableType()
     )
@@ -10225,7 +10242,7 @@
 	ArrayList                       names = new ArrayList();
 	ArrayList                         types = new ArrayList();
 	String[]                          nameArray;
-	DataTypeDescriptor[]        typeArray;
+	TypeDescriptor[]        typeArray;
 	int                                     columnCount;
 }
 {
@@ -10240,7 +10257,7 @@
 		columnCount = names.size();
 		nameArray = new String[ columnCount ];
 		names.toArray( nameArray );
-		typeArray = new DataTypeDescriptor[ columnCount ];
+		typeArray = new TypeDescriptor[ columnCount ];
 		types.toArray( typeArray );
 
 		//
@@ -10250,7 +10267,7 @@
 		//
 		for ( int i = 0; i < columnCount; i++ )
 		{
-		    if ( typeArray[ i ].getTypeId().isXMLTypeId() )
+		    if ( typeArray[ i ].getJDBCTypeId() == JDBC40Translation.SQLXML )
 		    { throw StandardException.newException( SQLState.LANG_XML_NOT_ALLOWED_DJRS ); }
 		}
 
@@ -10277,7 +10294,7 @@
 	typeDescriptor = dataTypeDDL()
 	{
 		names.add( name );
-		types.add( typeDescriptor );
+		types.add( typeDescriptor.getCatalogType() );
 	}
 }