提交 6c21d32d authored 作者: noelgrandin's avatar noelgrandin

Fix Issue 449: Postgres Serial data type should not automatically be marked as primary key

上级 477322e8
...@@ -26,6 +26,7 @@ Change Log ...@@ -26,6 +26,7 @@ Change Log
</li><li>Add support for CREATE TABLE TEST (ID BIGSERIAL) for PostgreSQL compatibility. Patch from Jesse Long. </li><li>Add support for CREATE TABLE TEST (ID BIGSERIAL) for PostgreSQL compatibility. Patch from Jesse Long.
</li><li>Add new collation command SET BINARY_COLLATION UNSIGNED, helps with people testing BINARY columns in MySQL mode. </li><li>Add new collation command SET BINARY_COLLATION UNSIGNED, helps with people testing BINARY columns in MySQL mode.
</li><li>Fix issue #453, ABBA race conditions in TABLE LINK connection sharing. </li><li>Fix issue #453, ABBA race conditions in TABLE LINK connection sharing.
</li><li>Fix Issue 449: Postgres Serial data type should not automatically be marked as primary key
</li></ul> </li></ul>
<h2>Version 1.3.171 (2013-03-17)</h2> <h2>Version 1.3.171 (2013-03-17)</h2>
......
...@@ -81,6 +81,7 @@ import org.h2.engine.Constants; ...@@ -81,6 +81,7 @@ 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.FunctionAlias; import org.h2.engine.FunctionAlias;
import org.h2.engine.Mode;
import org.h2.engine.Procedure; import org.h2.engine.Procedure;
import org.h2.engine.Right; import org.h2.engine.Right;
import org.h2.engine.Session; import org.h2.engine.Session;
...@@ -3519,12 +3520,18 @@ public class Parser { ...@@ -3519,12 +3520,18 @@ public class Parser {
column = new Column(columnName, Value.LONG); column = new Column(columnName, Value.LONG);
column.setOriginalSQL("IDENTITY"); column.setOriginalSQL("IDENTITY");
parseAutoIncrement(column); parseAutoIncrement(column);
// PostgreSQL compatibility
if (!database.getMode().serialColumnIsNotPK) {
column.setPrimaryKey(true); column.setPrimaryKey(true);
}
} else if (readIf("SERIAL")) { } else if (readIf("SERIAL")) {
column = new Column(columnName, Value.INT); column = new Column(columnName, Value.INT);
column.setOriginalSQL("SERIAL"); column.setOriginalSQL("SERIAL");
parseAutoIncrement(column); parseAutoIncrement(column);
// PostgreSQL compatibility
if (!database.getMode().serialColumnIsNotPK) {
column.setPrimaryKey(true); column.setPrimaryKey(true);
}
} else { } else {
column = parseColumnWithType(columnName); column = parseColumnWithType(columnName);
} }
......
...@@ -113,6 +113,12 @@ public class Mode { ...@@ -113,6 +113,12 @@ public class Mode {
*/ */
public boolean logIsLogBase10; public boolean logIsLogBase10;
/**
* SERIAL and BIGSERIAL columns are not automatically primary keys.
*/
public boolean serialColumnIsNotPK;
private final String name; private final String name;
static { static {
...@@ -165,6 +171,7 @@ public class Mode { ...@@ -165,6 +171,7 @@ public class Mode {
mode.supportOffsetFetch = true; mode.supportOffsetFetch = true;
mode.systemColumns = true; mode.systemColumns = true;
mode.logIsLogBase10 = true; mode.logIsLogBase10 = true;
mode.serialColumnIsNotPK = true;
add(mode); add(mode);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论