Index: server/src/etc/conf/default/standardjbosscmp-jdbc.xml
===================================================================
RCS file: /cvsroot/jboss/jboss/src/etc/conf/default/standardjbosscmp-jdbc.xml,v
retrieving revision 1.84.2.6
diff -u -3 -p -r1.84.2.6 standardjbosscmp-jdbc.xml
--- server/src/etc/conf/default/standardjbosscmp-jdbc.xml	26 Jan 2005 18:51:35 -0000	1.84.2.6
+++ server/src/etc/conf/default/standardjbosscmp-jdbc.xml	17 Mar 2005 15:10:04 -0000
@@ -1421,6 +1421,7 @@ Mapping proposed by Computer Associates,
          <pk-constraint-template>CONSTRAINT ?1 PRIMARY KEY (?2)</pk-constraint-template>
          <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
          <auto-increment-template>?1</auto-increment-template>
+         <add-column-default-supported>true</add-column-default-supported>
          <alias-header-prefix>t</alias-header-prefix>
          <alias-header-suffix>_</alias-header-suffix>
          <alias-max-length>32</alias-max-length>
@@ -1676,6 +1677,7 @@ Mapping proposed by Computer Associates,
          <fk-constraint-template>ALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)</fk-constraint-template>
          <auto-increment-template>?1 IDENTITY</auto-increment-template>
          <add-column-template>ALTER TABLE ?1 ADD COLUMN ?2 ?3</add-column-template>
+         <add-column-default-supported>true</add-column-default-supported>
          <drop-column-template>ALTER TABLE ?1 DROP COLUMN ?2</drop-column-template>
          <alias-header-prefix>t</alias-header-prefix>
          <alias-header-suffix>_</alias-header-suffix>
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStartCommand.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStartCommand.java,v
retrieving revision 1.50.2.1
diff -u -3 -p -r1.50.2.1 JDBCStartCommand.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStartCommand.java	26 Oct 2004 09:28:23 -0000	1.50.2.1
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCStartCommand.java	17 Mar 2005 15:10:04 -0000
@@ -105,6 +105,7 @@ public final class JDBCStartCommand
                String[] columnNames = jdbcType.getColumnNames();
                String[] sqlTypes = jdbcType.getSQLTypes();
                boolean[] notNull = jdbcType.getNotNull();
+               String[] defaultValues = jdbcType.getDefaultValues();
 
                for(int j = 0; j < columnNames.length; j++)
                {
@@ -122,9 +123,19 @@ public final class JDBCStartCommand
                      {
                         buf.append(SQLUtil.NOT).append(SQLUtil.NULL);
                      }
-                     alterTable(entity.getDataSource(),
-                           entityMetaData.getTypeMapping().getAddColumnTemplate(),
-                           tableName, name, buf.toString());
+                     if (entityMetaData.getTypeMapping().isAddColumnDefaultSupported() &&
+                         defaultValues[j] != null)
+                     {
+                        alterTable(entity.getDataSource(),
+                              entityMetaData.getTypeMapping().getAddColumnDefaultTemplate(),
+                              tableName, name, buf.toString(), sqlTypes[j], defaultValues[j]);
+                     }
+                     else
+                     {
+                        alterTable(entity.getDataSource(),
+                              entityMetaData.getTypeMapping().getAddColumnTemplate(),
+                              tableName, name, buf.toString());
+                     }
                   }
                   else
                   {
@@ -424,8 +435,28 @@ public final class JDBCStartCommand
    private void alterTable(DataSource dataSource, JDBCFunctionMappingMetaData mapping, String tableName, String fieldName, String fieldStructure)
       throws DeploymentException
    {
+     alterTable(dataSource, mapping, tableName, fieldName, fieldStructure, null, null);
+   }
+
+   private void alterTable(DataSource dataSource, JDBCFunctionMappingMetaData mapping, String tableName, String fieldName, String fieldStructure, String fieldType, String fieldValue)
+      throws DeploymentException
+   {
       StringBuffer sqlBuf = new StringBuffer();
-      mapping.getFunctionSql( new String[]{tableName, fieldName, fieldStructure}, sqlBuf );
+      if (fieldType == null || fieldValue == null)
+      {
+        mapping.getFunctionSql( new String[]{tableName, fieldName, fieldStructure}, sqlBuf );
+      }
+      else
+      {
+        if (fieldType.toUpperCase().startsWith("CHAR") || fieldType.toUpperCase().startsWith("VARCHAR"))
+        {
+          if (!fieldValue.startsWith(SQLUtil.PING))
+          {
+             fieldValue = SQLUtil.PING + fieldValue + SQLUtil.PING;
+          }
+        }
+        mapping.getFunctionSql( new String[]{tableName, fieldName, fieldStructure, fieldValue}, sqlBuf );
+      }
       String sql = sqlBuf.toString();
 
       log.warn( sql );
@@ -450,7 +481,7 @@ public final class JDBCStartCommand
          {
             con = dataSource.getConnection();
             statement = con.createStatement();
-            statement.executeUpdate(sql.toString());
+            statement.executeUpdate(sql);
          }
          finally
          {
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCType.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCType.java,v
retrieving revision 1.9
diff -u -3 -p -r1.9 JDBCType.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCType.java	21 Jul 2004 16:24:09 -0000	1.9
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCType.java	17 Mar 2005 15:10:05 -0000
@@ -29,6 +29,8 @@ public interface JDBCType
 
    boolean[] getAutoIncrement();
 
+   String[] getDefaultValues();
+
    JDBCResultSetReader[] getResultSetReaders();
 
    JDBCParameterSetter[] getParameterSetter();
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplex.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplex.java,v
retrieving revision 1.13
diff -u -3 -p -r1.13 JDBCTypeComplex.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplex.java	21 Jul 2004 16:24:09 -0000	1.13
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplex.java	17 Mar 2005 15:10:05 -0000
@@ -33,6 +33,7 @@ public final class JDBCTypeComplex imple
    private final int[] jdbcTypes;
    private final String[] sqlTypes;
    private final boolean[] notNull;
+   private final String[] defaultValues;
    private final JDBCResultSetReader[] resultSetReaders;
    private final JDBCParameterSetter[] paramSetters;
    private final Class fieldType;
@@ -51,6 +52,7 @@ public final class JDBCTypeComplex imple
       jdbcTypes = new int[propNum];
       sqlTypes = new String[propNum];
       notNull = new boolean[propNum];
+      defaultValues = new String[propNum];
       resultSetReaders = new JDBCResultSetReader[propNum];
       paramSetters = new JDBCParameterSetter[propNum];
       for(int i=0; i<properties.length; i++)
@@ -61,6 +63,7 @@ public final class JDBCTypeComplex imple
          jdbcTypes[i] = property.getJDBCType();
          sqlTypes[i] = property.getSQLType();
          notNull[i] = property.isNotNull();
+         defaultValues[i] = property.getDefaultValue();
          resultSetReaders[i] = property.getResulSetReader();
          paramSetters[i] = property.getParameterSetter();
          propertiesByName.put(property.getPropertyName(), property);
@@ -91,6 +94,10 @@ public final class JDBCTypeComplex imple
       return new boolean[] {false};
    }
 
+   public String[] getDefaultValues() {
+      return defaultValues;
+   }
+
    public Object getColumnValue(int index, Object value) {
       return getColumnValue(properties[index], value);
    }
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplexProperty.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplexProperty.java,v
retrieving revision 1.11
diff -u -3 -p -r1.11 JDBCTypeComplexProperty.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplexProperty.java	21 Jul 2004 16:24:09 -0000	1.11
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeComplexProperty.java	17 Mar 2005 15:10:05 -0000
@@ -30,6 +30,7 @@ public final class JDBCTypeComplexProper
    private final int jdbcType;
    private final String sqlType;
    private final boolean notNull;
+   private final String defaultValue;
    private final JDBCResultSetReader resulSetReader;
    private final JDBCParameterSetter paramSetter;
 
@@ -43,6 +44,7 @@ public final class JDBCTypeComplexProper
       int jdbcType,
       String sqlType,
       boolean notNull,
+      String defaultValue,
       Method[] getters,
       Method[] setters)
    {
@@ -53,6 +55,7 @@ public final class JDBCTypeComplexProper
       this.jdbcType = jdbcType;
       this.sqlType = sqlType;
       this.notNull = notNull;
+      this.defaultValue = defaultValue;
       this.getters = getters;
       this.setters = setters;
       this.resulSetReader = JDBCUtil.getResultSetReader(jdbcType, javaType);
@@ -64,7 +67,8 @@ public final class JDBCTypeComplexProper
       String columnName,
       int jdbcType,
       String sqlType,
-      boolean notNull)
+      boolean notNull,
+      String defaultValue)
    {
 
       this.propertyName = defaultProperty.propertyName;
@@ -73,6 +77,7 @@ public final class JDBCTypeComplexProper
       this.jdbcType = jdbcType;
       this.sqlType = sqlType;
       this.notNull = notNull;
+      this.defaultValue = defaultValue;
       this.getters = defaultProperty.getters;
       this.setters = defaultProperty.setters;
       this.resulSetReader = JDBCUtil.getResultSetReader(jdbcType, javaType);
@@ -109,6 +114,11 @@ public final class JDBCTypeComplexProper
       return notNull;
    }
 
+   public String getDefaultValue()
+   {
+      return defaultValue;
+   }
+
    public JDBCResultSetReader getResulSetReader()
    {
       return resulSetReader;
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeFactory.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeFactory.java,v
retrieving revision 1.25
diff -u -3 -p -r1.25 JDBCTypeFactory.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeFactory.java	10 Aug 2004 17:12:54 -0000	1.25
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeFactory.java	17 Mar 2005 15:10:05 -0000
@@ -355,6 +355,7 @@ public final class JDBCTypeFactory
          Class javaType = loadClass(mapping.getJavaType());
          boolean notNull = javaType.isPrimitive();
          boolean autoIncrement = false;
+         String defaultValue = null;
 
          JDBCParameterSetter paramSetter;
          if(mapping.getParamSetter() != null)
@@ -377,7 +378,7 @@ public final class JDBCTypeFactory
          }
 
          JDBCTypeSimple type = new JDBCTypeSimple(
-            null, javaType, jdbcType, sqlType, notNull, autoIncrement, null, paramSetter, resultReader
+            null, javaType, jdbcType, sqlType, notNull, autoIncrement, defaultValue, null, paramSetter, resultReader
          );
          mappedSimpleTypes.put(javaType, type);
       }
@@ -401,6 +402,7 @@ public final class JDBCTypeFactory
             int jdbcType = typeMappingMD.getJdbcType();
             boolean notNull = javaType.isPrimitive();
             boolean autoIncrement = false;
+            String defaultValue = null;
 
             JDBCParameterSetter paramSetter;
             if(typeMappingMD.getParamSetter() != null)
@@ -437,7 +439,7 @@ public final class JDBCTypeFactory
             }
 
             type = new JDBCTypeSimple(
-               null, javaType, jdbcType, sqlType, notNull, autoIncrement, null, paramSetter, resultReader
+               null, javaType, jdbcType, sqlType, notNull, autoIncrement, defaultValue, null, paramSetter, resultReader
             );
          }
          return type;
@@ -507,6 +509,7 @@ public final class JDBCTypeFactory
 
       boolean notNull = cmpField.isNotNull();
       boolean autoIncrement = cmpField.isAutoIncrement();
+      String defaultValue = cmpField.getDefaultValue();
 
       Mapper mapper = null;
       JDBCUserTypeMappingMetaData userTypeMapping = (JDBCUserTypeMappingMetaData)userTypeMappings.get(javaType.getName());
@@ -565,6 +568,7 @@ public final class JDBCTypeFactory
          sqlType,
          notNull,
          autoIncrement,
+         defaultValue,
          mapper,
          paramSetterImpl,
          resultReaderImpl
@@ -605,7 +609,8 @@ public final class JDBCTypeFactory
                defaultProperties[i].getColumnName(),
                defaultProperties[i].getJDBCType(),
                defaultProperties[i].getSQLType(),
-               cmpField.isNotNull() || defaultProperties[i].isNotNull());
+               cmpField.isNotNull() || defaultProperties[i].isNotNull(),
+               defaultProperties[i].getDefaultValue());
          }
          else
          {
@@ -633,12 +638,19 @@ public final class JDBCTypeFactory
                override.isNotNull() ||
                defaultProperties[i].isNotNull();
 
+            String defaultValue = override.getDefaultValue();
+            if (defaultValue == null)
+            {
+              defaultValue = defaultProperties[i].getDefaultValue();
+            }
+
             finalProperties[i] = new JDBCTypeComplexProperty(
                defaultProperties[i],
                columnName,
                jdbcType,
                sqlType,
-               notNull);
+               notNull,
+               defaultValue);
          }
       }
 
@@ -711,6 +723,8 @@ public final class JDBCTypeFactory
 
          boolean notNull = propertyStack.isNotNull();
 
+         String defaultValue = null;
+
          Method[] getters = propertyStack.getGetters();
          Method[] setters = propertyStack.getSetters();
 
@@ -721,6 +735,7 @@ public final class JDBCTypeFactory
             jdbcType,
             sqlType,
             notNull,
+            defaultValue,
             getters,
             setters));
 
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeSimple.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeSimple.java,v
retrieving revision 1.9
diff -u -3 -p -r1.9 JDBCTypeSimple.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeSimple.java	21 Jul 2004 16:24:09 -0000	1.9
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCTypeSimple.java	17 Mar 2005 15:10:05 -0000
@@ -22,6 +22,7 @@ public final class JDBCTypeSimple implem
    private final String[] sqlTypes;
    private final boolean[] notNull;
    private final boolean[] autoIncrement;
+   private final String[] defaultValues;
    private final JDBCResultSetReader[] resultSetReader;
    private final JDBCParameterSetter[] paramSetter;
 
@@ -34,6 +35,7 @@ public final class JDBCTypeSimple implem
       String sqlType,
       boolean notNull,
       boolean autoIncrement,
+      String defaultValue,
       Mapper mapper,
       JDBCParameterSetter paramSetter,
       JDBCResultSetReader resultReader
@@ -45,6 +47,7 @@ public final class JDBCTypeSimple implem
       sqlTypes = new String[]{sqlType};
       this.notNull = new boolean[]{notNull};
       this.autoIncrement = new boolean[]{autoIncrement};
+      defaultValues = new String[]{defaultValue};
       this.mapper = mapper;
       resultSetReader = new JDBCResultSetReader[]{resultReader};
       this.paramSetter = new JDBCParameterSetter[]{paramSetter};
@@ -80,6 +83,11 @@ public final class JDBCTypeSimple implem
       return autoIncrement;
    }
 
+   public final String[] getDefaultValues()
+   {
+      return defaultValues;
+   }
+
    public final Object getColumnValue(int index, Object value)
    {
       if(index != 0)
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java,v
retrieving revision 1.29
diff -u -3 -p -r1.29 SQLUtil.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java	11 Aug 2004 14:09:01 -0000	1.29
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java	17 Mar 2005 15:10:05 -0000
@@ -85,6 +85,7 @@ public final class SQLUtil
    public static final String UPDATE = "UPDATE ";
    public static final String SET = " SET ";
    public static final String TYPE = " TYPE ";
+   public static final String PING = "'";
    private static final String DOT = ".";
 
    private static final String EQ_QUESTMARK = "=?";
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCCMRFieldBridge.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCCMRFieldBridge.java,v
retrieving revision 1.92
diff -u -3 -p -r1.92 JDBCCMRFieldBridge.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCCMRFieldBridge.java	14 Sep 2004 09:07:12 -0000	1.92
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCCMRFieldBridge.java	17 Mar 2005 15:10:07 -0000
@@ -2163,6 +2163,11 @@ public final class JDBCCMRFieldBridge ex
          return notNull;
       }
 
+      public String[] getDefaultValues()
+      {
+         return new String[]{null};
+      }
+
       public boolean[] getAutoIncrement()
       {
          return new boolean[]{false};
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldMetaData.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldMetaData.java,v
retrieving revision 1.27
diff -u -3 -p -r1.27 JDBCCMPFieldMetaData.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldMetaData.java	21 Jul 2004 16:24:53 -0000	1.27
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldMetaData.java	17 Mar 2005 15:10:07 -0000
@@ -69,6 +69,9 @@ public final class JDBCCMPFieldMetaData
    /** Is this field a memeber of the primary keys or the sole prim-key-field. */
    private final boolean primaryKeyMember;
 
+   /** Does the field have a default value. */
+   private final String defaultValue;
+
    /** Should null values not be allowed for this field. */
    private final boolean notNull;
 
@@ -99,13 +102,13 @@ public final class JDBCCMPFieldMetaData
    /** Fully qualified class name of implementation of CMPFieldStateFactory */
    private final String stateFactory;
 
-   private static byte readCheckDirtyAfterGet(Element element, byte defaultValue) throws DeploymentException
+   private static byte readCheckDirtyAfterGet(Element element, byte dv) throws DeploymentException
    {
       byte checkDirtyAfterGet;
       String dirtyAfterGetStr = MetaData.getOptionalChildContent(element, "check-dirty-after-get");
       if(dirtyAfterGetStr == null)
       {
-         checkDirtyAfterGet = defaultValue;
+         checkDirtyAfterGet = dv;
       }
       else
       {
@@ -134,6 +137,7 @@ public final class JDBCCMPFieldMetaData
       readOnly = entity.isReadOnly();
       readTimeOut = entity.getReadTimeOut();
       primaryKeyMember = true;
+      defaultValue = null;
       notNull = true;
       primaryKeyField = null;
       genIndex = false;
@@ -164,6 +168,7 @@ public final class JDBCCMPFieldMetaData
       sqlType = null;
       readOnly = entity.isReadOnly();
       readTimeOut = entity.getReadTimeOut();
+      defaultValue = null;
       genIndex = false;
 
       // initialize primary key info
@@ -254,6 +259,7 @@ public final class JDBCCMPFieldMetaData
       readTimeOut = entity.getReadTimeOut();
       primaryKeyMember = defaultValues.isPrimaryKeyMember();
       primaryKeyField = defaultValues.getPrimaryKeyField();
+      defaultValue = defaultValues.getDefaultValue();
       notNull = defaultValues.isNotNull();
       unknownPkField = defaultValues.isUnknownPkField();
       autoIncrement = defaultValues.isAutoIncrement();
@@ -379,6 +385,17 @@ public final class JDBCCMPFieldMetaData
       // field object of the primary key
       primaryKeyField = defaultValues.getPrimaryKeyField();
 
+      // Default value
+      String defaultValueStr = MetaData.getOptionalChildContent(element, "default-value");
+      if(defaultValueStr != null)
+      {
+         defaultValue = defaultValueStr;
+      }
+      else
+      {
+         defaultValue = defaultValues.getDefaultValue();
+      }
+
       // not-null
       Element notNullElement = MetaData.getOptionalChild(element, "not-null");
       notNull =
@@ -471,6 +488,8 @@ public final class JDBCCMPFieldMetaData
       // primary key member?
       this.primaryKeyMember = primaryKeyMember;
 
+      defaultValue = MetaData.getOptionalChildContent(element, "default-value");
+
       // not-null
       this.notNull = notNull;
 
@@ -534,6 +553,7 @@ public final class JDBCCMPFieldMetaData
       this.readTimeOut = readTimeOut;
       this.primaryKeyMember = primaryKeyMember;
       primaryKeyField = defaultValues.getPrimaryKeyField();
+      this.defaultValue = null;
       this.notNull = notNull;
 
       for(Iterator i = defaultValues.propertyOverrides.iterator(); i.hasNext();)
@@ -572,6 +592,7 @@ public final class JDBCCMPFieldMetaData
       readOnly = false;
       readTimeOut = -1;
       primaryKeyMember = false;
+      defaultValue = null;
       notNull = true;
       primaryKeyField = null;
       unknownPkField = false;
@@ -683,6 +704,15 @@ public final class JDBCCMPFieldMetaData
    }
 
    /**
+    * Gets the default value for the property.
+    * @return Null if the property doesnt have a default value; otherwise the value
+    */
+   public String getDefaultValue()
+   {
+      return defaultValue;
+   }
+
+   /**
     * Should this field allow null values?
     * @return true if this field will not allow a null value.
     */
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldPropertyMetaData.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldPropertyMetaData.java,v
retrieving revision 1.8
diff -u -3 -p -r1.8 JDBCCMPFieldPropertyMetaData.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldPropertyMetaData.java	21 Jul 2004 16:24:53 -0000	1.8
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCCMPFieldPropertyMetaData.java	17 Mar 2005 15:10:07 -0000
@@ -49,6 +49,11 @@ public final class JDBCCMPFieldPropertyM
    private final boolean notNull;
 
    /**
+    * Default value for this property
+    */
+   private final String defaultValue;
+
+   /**
     * Constructs cmp field property meta data with the data contained in the 
     * property xml element from a jbosscmp-jdbc xml file.
     *
@@ -87,6 +92,9 @@ public final class JDBCCMPFieldPropertyM
 
       // notNull
       notNull = (MetaData.getOptionalChild(element, "not-null") != null);
+
+      // defaultValue
+      defaultValue = MetaData.getOptionalChildContent(element, "default-value");
    }
 
    /**
@@ -118,6 +126,9 @@ public final class JDBCCMPFieldPropertyM
       
       // not-null
       notNull = defaultValues.notNull;
+
+      // default-value
+      defaultValue = defaultValues.defaultValue;
    }
 
    /**
@@ -160,6 +171,14 @@ public final class JDBCCMPFieldPropertyM
    }
 
    /**
+    * Gets the default value of the property.
+    * @return Null if the property doesnt have a default value; otherwise the value
+    */
+   public String getDefaultValue() {
+      return defaultValue;
+   }
+   
+   /**
     * Compares this JDBCCMPFieldPropertyMetaData against the specified object.
     * Returns true if the objects are the same. Two 
     * JDBCCMPFieldPropertyMetaData are the same if they both have the same name
Index: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCTypeMappingMetaData.java
===================================================================
RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCTypeMappingMetaData.java,v
retrieving revision 1.21
diff -u -3 -p -r1.21 JDBCTypeMappingMetaData.java
--- server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCTypeMappingMetaData.java	21 Jul 2004 16:24:53 -0000	1.21
+++ server/src/main/org/jboss/ejb/plugins/cmp/jdbc/metadata/JDBCTypeMappingMetaData.java	17 Mar 2005 15:10:07 -0000
@@ -88,6 +88,8 @@ public final class JDBCTypeMappingMetaDa
    private JDBCFunctionMappingMetaData pkConstraint = null;
    private JDBCFunctionMappingMetaData autoIncrement = null;
    private JDBCFunctionMappingMetaData addColumn = null;
+   private JDBCFunctionMappingMetaData addDefaultColumn = null;
+   private boolean addColumnDefaultSupported;
    private JDBCFunctionMappingMetaData dropColumn = null;
    private JDBCFunctionMappingMetaData alterColumn = null;
 
@@ -135,6 +137,24 @@ public final class JDBCTypeMappingMetaDa
       {
          addColumn = new JDBCFunctionMappingMetaData("add-column-template", "ALTER TABLE ?1 ADD ?2 ?3");
       }
+      alterColumnSQL = MetaData.getOptionalChildContent(element, "add-column-default-template");
+      if(alterColumnSQL != null && !alterColumnSQL.trim().equals(""))
+      {
+         addDefaultColumn = new JDBCFunctionMappingMetaData("add-column-default-template", alterColumnSQL);
+      }
+      else
+      {
+         addDefaultColumn = new JDBCFunctionMappingMetaData("add-column-default-template", "ALTER TABLE ?1 ADD ?2 ?3 DEFAULT ?4");
+      }
+      String addColumnDefaultSupportedStr = MetaData.getOptionalChildContent(element, "add-column-default-supported");
+      if (addColumnDefaultSupportedStr != null && !addColumnDefaultSupportedStr.trim().equals(""))
+      {
+         addColumnDefaultSupported = Boolean.valueOf(addColumnDefaultSupportedStr).booleanValue();
+      }
+      else
+      {
+         addColumnDefaultSupported = false;
+      }
       alterColumnSQL = MetaData.getOptionalChildContent(element, "alter-column-template");
       if(alterColumnSQL != null && !alterColumnSQL.trim().equals(""))
       {
@@ -351,6 +371,22 @@ public final class JDBCTypeMappingMetaDa
    }
 
    /**
+    * Returns add column default SQL template.
+    */
+   public JDBCFunctionMappingMetaData getAddColumnDefaultTemplate()
+   {
+      return addDefaultColumn;
+   }
+
+   /**
+    * Does this type mapping support default values for ALTER TABLE ADD ?
+    */
+   public boolean isAddColumnDefaultSupported()
+   {
+      return addColumnDefaultSupported;
+   }
+
+   /**
     * Returns auto increment SQL template.
     */
    public JDBCFunctionMappingMetaData getDropColumnTemplate()
Index: server/src/resources/dtd/jbosscmp-jdbc_4_0.dtd
===================================================================
RCS file: /cvsroot/jboss/jboss/src/resources/dtd/jbosscmp-jdbc_4_0.dtd,v
retrieving revision 1.1.2.1
diff -u -3 -p -r1.1.2.1 jbosscmp-jdbc_4_0.dtd
--- server/src/resources/dtd/jbosscmp-jdbc_4_0.dtd	6 Jan 2005 12:26:42 -0000	1.1.2.1
+++ server/src/resources/dtd/jbosscmp-jdbc_4_0.dtd	17 Mar 2005 15:10:07 -0000
@@ -259,7 +259,8 @@ The cmp-field element contains the confi
 -->
 <!ELEMENT cmp-field (field-name, read-only?, read-time-out?,
          column-name?, not-null?, ((jdbc-type, sql-type) | (property+))?,
-         auto-increment?, dbindex?, check-dirty-after-get?, state-factory? )>
+         default-value?, auto-increment?, dbindex?, check-dirty-after-get?,
+         state-factory? )>
 
 
 <!--
@@ -281,6 +282,13 @@ If present the field will not allow a fi
 <!ELEMENT not-null EMPTY>
 
 <!--
+The default value of the new column for existing rows.
+
+add-coulmn-default-supported must be set to true for this to work
+-->
+<!ELEMENT default-value (#PCDATA)>
+
+<!--
 If present, the server will try to create an index on the column
 in the database called <fieldname>_index
 -->
@@ -308,7 +316,7 @@ value class property of a cmp-field that
 value class.
 -->
 <!ELEMENT property (property-name, column-name?, not-null?,
-         (jdbc-type, sql-type)?)>
+         (jdbc-type, sql-type)?, default-value?)>
 
 
 <!--
@@ -605,7 +613,8 @@ This includes both type mapping and func
 -->
 <!ELEMENT type-mapping (name, row-locking-template, pk-constraint-template,
       fk-constraint-template, auto-increment-template?,
-      add-column-template?, alter-column-template?, drop-column-template?,
+      add-column-template?, add-column-default-template?, add-column-default-supported?,
+      alter-column-template?, drop-column-template?,
       alias-header-prefix,
       alias-header-suffix, alias-max-length, subquery-supported,
       true-mapping, false-mapping,
@@ -684,6 +693,34 @@ ALTER TABLE ?1 ADD ?2 ?3
 <!ELEMENT add-column-template (#PCDATA)>
 
 <!--
+Template to add a column with a default value to the database.
+Arguments are as follows :
+
+1. Table name
+2. Column name
+3. Column type
+4. Column value
+
+Default value is
+
+ALTER TABLE ?1 ADD ?2 ?3 DEFAULT ?4
+-->
+<!ELEMENT add-column-default-template (#PCDATA)>
+
+<!--
+Does this type-mapping support default values for ALTER TABLE ADD ?
+
+The add-column-default-supported element must be one of the two following:
+         <add-column-default-supported>true</add-column-default-supported>
+         <add-column-default-supported>false</add-column-default-supported>
+
+Default value is
+
+false
+-->
+<!ELEMENT add-column-default-supported (#PCDATA)>
+
+<!--
 Template to alter a column to the database.
 Arguments are as follows :
 
