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