提交 e574982a authored 作者: Noel Grandin's avatar Noel Grandin

Prevent people using unsupported combination of auto-increment columns and clustering mode.

上级 c6584ac2
......@@ -21,6 +21,8 @@ Change Log
<h2>Next Version (unreleased)</h2>
<ul>
<li>Prevent people using unsupported combination of auto-increment columns and clustering mode.
</li>
<li>Support for DB2 time format, patch by Niklas Mehner
</li>
<li>Added support for Connection.setClientInfo() in compatibility modes for DB2, Postgresql, Oracle and MySQL.
......
......@@ -14,6 +14,7 @@ import org.h2.command.Parser;
import org.h2.command.Prepared;
import org.h2.constraint.Constraint;
import org.h2.constraint.ConstraintReferential;
import org.h2.engine.Constants;
import org.h2.engine.Database;
import org.h2.engine.DbObject;
import org.h2.engine.Right;
......@@ -88,10 +89,12 @@ public class AlterTableAlterColumn extends SchemaCommand {
table.lock(session, true, true);
if (newColumn != null) {
checkDefaultReferencesTable(newColumn.getDefaultExpression());
checkClustering(newColumn);
}
if (columnsToAdd != null) {
for (Column column : columnsToAdd) {
checkDefaultReferencesTable(column.getDefaultExpression());
checkClustering(column);
}
}
switch (type) {
......@@ -197,6 +200,15 @@ public class AlterTableAlterColumn extends SchemaCommand {
}
}
private void checkClustering(Column c) {
if (!Constants.CLUSTERING_DISABLED
.equals(session.getDatabase().getCluster())
&& c.isAutoIncrement()) {
throw DbException.getUnsupportedException(
"CLUSTERING && auto-increment columns");
}
}
private void convertAutoIncrementColumn(Column c) {
if (c.isAutoIncrement()) {
if (c.isPrimaryKey()) {
......
......@@ -7,11 +7,11 @@ package org.h2.command.ddl;
import java.util.ArrayList;
import java.util.HashSet;
import org.h2.api.ErrorCode;
import org.h2.command.CommandInterface;
import org.h2.command.dml.Insert;
import org.h2.command.dml.Query;
import org.h2.engine.Constants;
import org.h2.engine.Database;
import org.h2.engine.DbObject;
import org.h2.engine.Session;
......@@ -140,6 +140,11 @@ public class CreateTable extends SchemaCommand {
if (c.isAutoIncrement()) {
int objId = getObjectId();
c.convertAutoIncrementToSequence(session, getSchema(), objId, data.temporary);
if (!Constants.CLUSTERING_DISABLED
.equals(session.getDatabase().getCluster())) {
throw DbException.getUnsupportedException(
"CLUSTERING && auto-increment columns");
}
}
Sequence seq = c.getSequence();
if (seq != null) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论