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

Merge remote-tracking branch 'h2database/master' into non_blocking

...@@ -6727,6 +6727,7 @@ public class Parser { ...@@ -6727,6 +6727,7 @@ public class Parser {
cols[0].columnName = column.getName(); cols[0].columnName = column.getName();
AlterTableAddConstraint pk = new AlterTableAddConstraint( AlterTableAddConstraint pk = new AlterTableAddConstraint(
session, schema, false); session, schema, false);
pk.setConstraintName(constraintName);
pk.setPrimaryKeyHash(hash); pk.setPrimaryKeyHash(hash);
pk.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY); pk.setType(CommandInterface.ALTER_TABLE_ADD_CONSTRAINT_PRIMARY_KEY);
pk.setTableName(tableName); pk.setTableName(tableName);
......
...@@ -16,10 +16,7 @@ import org.h2.table.Column; ...@@ -16,10 +16,7 @@ import org.h2.table.Column;
import org.h2.table.ColumnResolver; import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter; import org.h2.table.TableFilter;
import org.h2.util.MathUtils; import org.h2.util.MathUtils;
import org.h2.value.Value; import org.h2.value.*;
import org.h2.value.ValueBoolean;
import org.h2.value.ValueGeometry;
import org.h2.value.ValueNull;
/** /**
* Example comparison expressions are ID=1, NAME=NAME, NAME IS NULL. * Example comparison expressions are ID=1, NAME=NAME, NAME IS NULL.
...@@ -266,12 +263,28 @@ public class Comparison extends Condition { ...@@ -266,12 +263,28 @@ public class Comparison extends Condition {
} }
} }
int dataType = Value.getHigherOrder(left.getType(), right.getType()); int dataType = Value.getHigherOrder(left.getType(), right.getType());
if (dataType == Value.ENUM) {
String[] enumerators = getEnumerators(l, r);
l = l.convertToEnum(enumerators);
r = r.convertToEnum(enumerators);
} else {
l = l.convertTo(dataType); l = l.convertTo(dataType);
r = r.convertTo(dataType); r = r.convertTo(dataType);
}
boolean result = compareNotNull(database, l, r, compareType); boolean result = compareNotNull(database, l, r, compareType);
return ValueBoolean.get(result); return ValueBoolean.get(result);
} }
private String[] getEnumerators(Value left, Value right) {
if (left.getType() == Value.ENUM) {
return ((ValueEnum) left).getEnumerators();
} else if (right.getType() == Value.ENUM) {
return ((ValueEnum) right).getEnumerators();
} else {
return new String[0];
}
}
/** /**
* Compare two values, given the values are not NULL. * Compare two values, given the values are not NULL.
* *
......
...@@ -592,6 +592,17 @@ public abstract class Value { ...@@ -592,6 +592,17 @@ public abstract class Value {
return convertTo(targetType, -1, null); return convertTo(targetType, -1, null);
} }
/**
* Convert value to ENUM value
* @param enumerators allowed values for the ENUM to which the value is converted
* @return value represented as ENUM
*/
public Value convertToEnum(String[] enumerators) {
// Use -1 to indicate "default behaviour" where value conversion should not
// depend on any datatype precision.
return convertTo(ENUM, -1, null, null, enumerators);
}
/** /**
* Compare a value to the specified type. * Compare a value to the specified type.
* *
......
...@@ -479,6 +479,27 @@ public class TestPreparedStatement extends TestBase { ...@@ -479,6 +479,27 @@ public class TestPreparedStatement extends TestBase {
assertEquals(Integer.class, o.getClass()); assertEquals(Integer.class, o.getClass());
} }
for (int i = 0; i < goodSizes.length; i++) {
PreparedStatement prep = conn.prepareStatement("SELECT * FROM test_enum WHERE size = ?");
prep.setObject(1, goodSizes[i]);
ResultSet rs = prep.executeQuery();
rs.next();
String s = rs.getString(1);
assertTrue(s.equals(goodSizes[i]));
assertFalse(rs.next());
}
for (int i = 0; i < badSizes.length; i++) {
PreparedStatement prep = conn.prepareStatement("SELECT * FROM test_enum WHERE size = ?");
prep.setObject(1, badSizes[i]);
if (config.lazy) {
ResultSet resultSet = prep.executeQuery();
assertThrows(ErrorCode.ENUM_VALUE_NOT_PERMITTED, resultSet).next();
} else {
assertThrows(ErrorCode.ENUM_VALUE_NOT_PERMITTED, prep).executeQuery();
}
}
stat.execute("DROP TABLE test_enum"); stat.execute("DROP TABLE test_enum");
} }
......
...@@ -102,7 +102,8 @@ public class TestScript extends TestBase { ...@@ -102,7 +102,8 @@ public class TestScript extends TestBase {
"uuid", "varchar", "varchar-ignorecase" }) { "uuid", "varchar", "varchar-ignorecase" }) {
testScript("datatypes/" + s + ".sql"); testScript("datatypes/" + s + ".sql");
} }
for (String s : new String[] { "alterTableAdd", "alterTableDropColumn", "createView", "dropSchema" }) { for (String s : new String[] { "alterTableAdd", "alterTableDropColumn", "createView", "createTable",
"dropSchema" }) {
testScript("ddl/" + s + ".sql"); testScript("ddl/" + s + ".sql");
} }
for (String s : new String[] { "insertIgnore", "mergeUsing", "script", "with" }) { for (String s : new String[] { "insertIgnore", "mergeUsing", "script", "with" }) {
......
...@@ -86,3 +86,18 @@ INSERT INTO TEST VALUES (10, 20, 30, 40); ...@@ -86,3 +86,18 @@ INSERT INTO TEST VALUES (10, 20, 30, 40);
DROP TABLE TEST; DROP TABLE TEST;
> ok > ok
CREATE TABLE TEST();
> ok
ALTER TABLE TEST ADD A INT CONSTRAINT PK_1 PRIMARY KEY;
> ok
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
> CONSTRAINT_NAME CONSTRAINT_TYPE
> --------------- ---------------
> PK_1 PRIMARY KEY
> rows: 1
DROP TABLE TEST;
> ok
-- Copyright 2004-2018 H2 Group. Multiple-Licensed under the MPL 2.0,
-- and the EPL 1.0 (http://h2database.com/html/license.html).
-- Initial Developer: H2 Group
--
CREATE TABLE TEST(A INT CONSTRAINT PK_1 PRIMARY KEY);
> ok
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
> CONSTRAINT_NAME CONSTRAINT_TYPE
> --------------- ---------------
> PK_1 PRIMARY KEY
> rows: 1
DROP TABLE TEST;
> ok
...@@ -163,15 +163,15 @@ public class Build extends BuildBase { ...@@ -163,15 +163,15 @@ public class Build extends BuildBase {
downloadUsingMaven("ext/org.jacoco.report-0.8.0.jar", downloadUsingMaven("ext/org.jacoco.report-0.8.0.jar",
"org.jacoco", "org.jacoco.report", "0.8.0", "org.jacoco", "org.jacoco.report", "0.8.0",
"1bcab2a451f5a382bc674857c8f3f6d3fa52151d"); "1bcab2a451f5a382bc674857c8f3f6d3fa52151d");
downloadUsingMaven("ext/asm-6.1-beta.jar", downloadUsingMaven("ext/asm-6.1.jar",
"org.ow2.asm", "asm", "6.1-beta", "org.ow2.asm", "asm", "6.1",
"bac2f84e42b7db902103a9ec8c4ca1293223e0ea"); "94a0d17ba8eb24833cd54253ace9b053786a9571");
downloadUsingMaven("ext/asm-commons-6.1-beta.jar", downloadUsingMaven("ext/asm-commons-6.1.jar",
"org.ow2.asm", "asm-commons", "6.1-beta", "org.ow2.asm", "asm-commons", "6.1",
"4ec77cde3be41559f92d25cdb39b9c55ee479253"); "8a8d242d7ce00fc937a245fae5b65763d13f7cd1");
downloadUsingMaven("ext/asm-tree-6.1-beta.jar", downloadUsingMaven("ext/asm-tree-6.1.jar",
"org.ow2.asm", "asm-tree", "6.1-beta", "org.ow2.asm", "asm-tree", "6.1",
"539d3b0f5f7f5b04b1c286de8e76655b59ab2d43"); "701262d4b9bcbdc2d4b80617e82db9a2b7f4f088");
downloadUsingMaven("ext/args4j-2.33.jar", downloadUsingMaven("ext/args4j-2.33.jar",
"args4j", "args4j", "2.33", "args4j", "args4j", "2.33",
"bd87a75374a6d6523de82fef51fc3cfe9baf9fc9"); "bd87a75374a6d6523de82fef51fc3cfe9baf9fc9");
...@@ -209,9 +209,9 @@ public class Build extends BuildBase { ...@@ -209,9 +209,9 @@ public class Build extends BuildBase {
"ext/org.jacoco.cli-0.8.0.jar" + File.pathSeparator "ext/org.jacoco.cli-0.8.0.jar" + File.pathSeparator
+ "ext/org.jacoco.core-0.8.0.jar" + File.pathSeparator + "ext/org.jacoco.core-0.8.0.jar" + File.pathSeparator
+ "ext/org.jacoco.report-0.8.0.jar" + File.pathSeparator + "ext/org.jacoco.report-0.8.0.jar" + File.pathSeparator
+ "ext/asm-6.1-beta.jar" + File.pathSeparator + "ext/asm-6.1.jar" + File.pathSeparator
+ "ext/asm-commons-6.1-beta.jar" + File.pathSeparator + "ext/asm-commons-6.1.jar" + File.pathSeparator
+ "ext/asm-tree-6.1-beta.jar" + File.pathSeparator + "ext/asm-tree-6.1.jar" + File.pathSeparator
+ "ext/args4j-2.33.jar", + "ext/args4j-2.33.jar",
"org.jacoco.cli.internal.Main", "report", "coverage/jacoco.exec", "org.jacoco.cli.internal.Main", "report", "coverage/jacoco.exec",
"--classfiles", "coverage/bin", "--classfiles", "coverage/bin",
...@@ -524,16 +524,22 @@ public class Build extends BuildBase { ...@@ -524,16 +524,22 @@ public class Build extends BuildBase {
return files; return files;
} }
/**
* Add META-INF/versions for Java 9+.
*/
private void addVersions() {
copy("temp/META-INF/versions/9", files("src/java9/precompiled"), "src/java9/precompiled");
}
/** /**
* Create the regular h2.jar file. * Create the regular h2.jar file.
*/ */
@Description(summary = "Create the regular h2.jar file.") @Description(summary = "Create the regular h2.jar file.")
public void jar() { public void jar() {
compile(); compile();
FileList files = files("src/java9/precompiled"); addVersions();
copy("temp/META-INF/versions/9", files, "src/java9/precompiled");
manifest("H2 Database Engine", "org.h2.tools.Console"); manifest("H2 Database Engine", "org.h2.tools.Console");
files = files("temp"). FileList files = files("temp").
exclude("temp/android/*"). exclude("temp/android/*").
exclude("temp/org/h2/android/*"). exclude("temp/org/h2/android/*").
exclude("temp/org/h2/build/*"). exclude("temp/org/h2/build/*").
...@@ -596,6 +602,7 @@ public class Build extends BuildBase { ...@@ -596,6 +602,7 @@ public class Build extends BuildBase {
@Description(summary = "Create h2client.jar with only the remote JDBC implementation.") @Description(summary = "Create h2client.jar with only the remote JDBC implementation.")
public void jarClient() { public void jarClient() {
compile(true, true, false); compile(true, true, false);
addVersions();
FileList files = files("temp"). FileList files = files("temp").
exclude("temp/org/h2/build/*"). exclude("temp/org/h2/build/*").
exclude("temp/org/h2/dev/*"). exclude("temp/org/h2/dev/*").
...@@ -622,6 +629,7 @@ public class Build extends BuildBase { ...@@ -622,6 +629,7 @@ public class Build extends BuildBase {
@Description(summary = "Create h2mvstore.jar containing only the MVStore.") @Description(summary = "Create h2mvstore.jar containing only the MVStore.")
public void jarMVStore() { public void jarMVStore() {
compileMVStore(true); compileMVStore(true);
addVersions();
manifestMVStore(); manifestMVStore();
FileList files = files("temp"); FileList files = files("temp");
files.exclude("*.DS_Store"); files.exclude("*.DS_Store");
...@@ -636,6 +644,7 @@ public class Build extends BuildBase { ...@@ -636,6 +644,7 @@ public class Build extends BuildBase {
@Description(summary = "Create h2small.jar containing only the embedded database.") @Description(summary = "Create h2small.jar containing only the embedded database.")
public void jarSmall() { public void jarSmall() {
compile(false, false, true); compile(false, false, true);
addVersions();
FileList files = files("temp"). FileList files = files("temp").
exclude("temp/android/*"). exclude("temp/android/*").
exclude("temp/org/h2/android/*"). exclude("temp/org/h2/android/*").
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论