[#5709] IDENTITY implies NOT NULL and not defaulted

This commit is contained in:
lukaseder 2016-12-16 16:41:10 +01:00
parent 544b676e76
commit 78d23a3111
2 changed files with 10 additions and 3 deletions

View File

@ -192,6 +192,8 @@ public interface DataType<T> extends Serializable {
/**
* Return a new data type like this, with a new nullability.
* <p>
* [#5709] A <code>nullable</code> column cannot have an {@link #identity()}.
*
* @param nullable The new nullability
* @return The new data type
@ -207,6 +209,9 @@ public interface DataType<T> extends Serializable {
/**
* Return a new data type like this, with a new identity flag.
* <p>
* [#5709] The IDENTITY flag imposes a NOT NULL constraint, and removes all
* DEFAULT values.
*
* @param identity The new identity flag
* @return The new data type
@ -223,6 +228,8 @@ public interface DataType<T> extends Serializable {
/**
* Specify an expression to be applied as the <code>DEFAULT</code> value for
* this data type.
* <p>
* [#5709] A <code>defaulted</code> column cannot have an {@link #identity()}.
*
* @see #defaultValue(Field)
*/

View File

@ -363,7 +363,7 @@ public class DefaultDataType<T> implements DataType<T> {
@Override
public final DataType<T> nullable(boolean n) {
return new DefaultDataType<T>(this, precision, scale, length, n, identity, defaultValue);
return new DefaultDataType<T>(this, precision, scale, length, n, n ? false : identity, defaultValue);
}
@Override
@ -373,7 +373,7 @@ public class DefaultDataType<T> implements DataType<T> {
@Override
public final DataType<T> identity(boolean i) {
return new DefaultDataType<T>(this, precision, scale, length, nullable, i, defaultValue);
return new DefaultDataType<T>(this, precision, scale, length, i ? false : nullable, i, i ? null : defaultValue);
}
@Override
@ -388,7 +388,7 @@ public class DefaultDataType<T> implements DataType<T> {
@Override
public final DataType<T> defaultValue(Field<T> d) {
return new DefaultDataType<T>(this, precision, scale, length, nullable, identity, d);
return new DefaultDataType<T>(this, precision, scale, length, nullable, d != null ? false : identity, d);
}
@Override