Allow primitive columns to be declared to accept NULL

If a primitive column appears as a leaf-level column in a nested
field the field itself may be set to null in Java, causing the
SQL value to be set to null for the primitive type, thus we must
support null values on the leaf-level columns, even if the Java
primitive type it represents doesn't know how to store a null.

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/com/google/gwtorm/schema/sql/SqlBooleanTypeInfo.java b/src/com/google/gwtorm/schema/sql/SqlBooleanTypeInfo.java
index d3c3b70..9828f4a 100644
--- a/src/com/google/gwtorm/schema/sql/SqlBooleanTypeInfo.java
+++ b/src/com/google/gwtorm/schema/sql/SqlBooleanTypeInfo.java
@@ -29,8 +29,14 @@
     final String name = column.getColumnName();
     final String t = getTrueLiteralValue();
     final String f = getFalseLiteralValue();
-    return "CHAR(1) NOT NULL DEFAULT " + f + " CHECK (" + name + " IN (" + t
-        + "," + f + "))";
+    final StringBuilder r = new StringBuilder();
+    r.append("CHAR(1)");
+    if (column.isNotNull()) {
+      r.append(" DEFAULT " + f);
+      r.append(" NOT NULL");
+    }
+    r.append(" CHECK (" + name + " IN (" + t + "," + f + "))");
+    return r.toString();
   }
 
   @Override
diff --git a/src/com/google/gwtorm/schema/sql/SqlCharTypeInfo.java b/src/com/google/gwtorm/schema/sql/SqlCharTypeInfo.java
index 6564218..890600f 100644
--- a/src/com/google/gwtorm/schema/sql/SqlCharTypeInfo.java
+++ b/src/com/google/gwtorm/schema/sql/SqlCharTypeInfo.java
@@ -27,8 +27,10 @@
   public String getSqlType(final ColumnModel column, final SqlDialect dialect) {
     final StringBuilder r = new StringBuilder();
     r.append("CHAR(1)");
-    r.append(" DEFAULT ' '");
-    r.append(" NOT NULL");
+    if (column.isNotNull()) {
+      r.append(" DEFAULT ' '");
+      r.append(" NOT NULL");
+    }
     return r.toString();
   }
 
diff --git a/src/com/google/gwtorm/schema/sql/SqlIntTypeInfo.java b/src/com/google/gwtorm/schema/sql/SqlIntTypeInfo.java
index a13a4c4..23c89da 100644
--- a/src/com/google/gwtorm/schema/sql/SqlIntTypeInfo.java
+++ b/src/com/google/gwtorm/schema/sql/SqlIntTypeInfo.java
@@ -31,6 +31,12 @@
 
   @Override
   public String getSqlType(final ColumnModel column, final SqlDialect dialect) {
-    return dialect.getSqlTypeName(getSqlTypeConstant()) + " DEFAULT 0 NOT NULL";
+    final StringBuilder r = new StringBuilder();
+    r.append(dialect.getSqlTypeName(getSqlTypeConstant()));
+    if (column.isNotNull()) {
+      r.append(" DEFAULT 0");
+      r.append(" NOT NULL");
+    }
+    return r.toString();
   }
 }
diff --git a/src/com/google/gwtorm/schema/sql/SqlLongTypeInfo.java b/src/com/google/gwtorm/schema/sql/SqlLongTypeInfo.java
index b266345..940c7fc 100644
--- a/src/com/google/gwtorm/schema/sql/SqlLongTypeInfo.java
+++ b/src/com/google/gwtorm/schema/sql/SqlLongTypeInfo.java
@@ -31,6 +31,12 @@
 
   @Override
   public String getSqlType(final ColumnModel column, final SqlDialect dialect) {
-    return dialect.getSqlTypeName(getSqlTypeConstant()) + " DEFAULT 0 NOT NULL";
+    final StringBuilder r = new StringBuilder();
+    r.append(dialect.getSqlTypeName(getSqlTypeConstant()));
+    if (column.isNotNull()) {
+      r.append(" DEFAULT 0");
+      r.append(" NOT NULL");
+    }
+    return r.toString();
   }
 }
diff --git a/src/com/google/gwtorm/schema/sql/SqlShortTypeInfo.java b/src/com/google/gwtorm/schema/sql/SqlShortTypeInfo.java
index 1686a20..c2f895e 100644
--- a/src/com/google/gwtorm/schema/sql/SqlShortTypeInfo.java
+++ b/src/com/google/gwtorm/schema/sql/SqlShortTypeInfo.java
@@ -31,6 +31,12 @@
 
   @Override
   public String getSqlType(final ColumnModel column, final SqlDialect dialect) {
-    return dialect.getSqlTypeName(getSqlTypeConstant()) + " DEFAULT 0 NOT NULL";
+    final StringBuilder r = new StringBuilder();
+    r.append(dialect.getSqlTypeName(getSqlTypeConstant()));
+    if (column.isNotNull()) {
+      r.append(" DEFAULT 0");
+      r.append(" NOT NULL");
+    }
+    return r.toString();
   }
 }