提交 e9559517 authored 作者: andrei's avatar andrei

issue#611 setting enum column to NULL was broken

上级 fa41262f
......@@ -23,6 +23,7 @@ import org.h2.table.TableFilter;
import org.h2.value.Value;
import org.h2.value.ValueBoolean;
import org.h2.value.ValueEnum;
import org.h2.value.ValueNull;
/**
* A expression that represents a column of a table or view.
......@@ -188,7 +189,7 @@ public class ExpressionColumn extends Expression {
columnResolver.getValue(column);
throw DbException.get(ErrorCode.MUST_GROUP_BY_COLUMN_1, getSQL());
}
if (column.getEnumerators() != null) {
if (column.getEnumerators() != null && value != ValueNull.INSTANCE) {
return ValueEnum.get(column.getEnumerators(), value.getInt());
}
return value;
......
......@@ -383,7 +383,7 @@ public class Column {
getCreateSQL(), s + " (" + value.getPrecision() + ")");
}
}
if (isEnumerated()) {
if (isEnumerated() && value != ValueNull.INSTANCE) {
if (!ValueEnum.isValid(enumerators, value)) {
String s = value.getTraceSQL();
if (s.length() > 127) {
......
......@@ -7,8 +7,8 @@
create table card (rank int, suit enum('hearts', 'clubs', 'spades'));
> ok
insert into card (rank, suit) values (0, 'clubs'), (3, 'hearts');
> update count: 2
insert into card (rank, suit) values (0, 'clubs'), (3, 'hearts'), (4, NULL);
> update count: 3
alter table card alter column suit enum('hearts', 'clubs', 'spades', 'diamonds');
> ok
......@@ -18,10 +18,12 @@ select * from card;
> ---- ------
> 0 clubs
> 3 hearts
> 4 null
select * from card order by suit;
> RANK SUIT
> ---- ------
> 4 null
> 3 hearts
> 0 clubs
......@@ -31,6 +33,7 @@ insert into card (rank, suit) values (8, 'diamonds'), (10, 'clubs'), (7, 'hearts
select suit, count(rank) from card group by suit order by suit, count(rank);
> SUIT COUNT(RANK)
> -------- -----------
> null 1
> hearts 2
> clubs 2
> diamonds 1
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论